Funktion mb_strtoupper() - String in Großbuchstaben umwandeln in UTF-8

In PHP-Anwendungen werden an verschiedenen Stellen Zeichenketten in Großbuchstaben umgewandelt. Das kann z.B. notwendig sein, wenn man die Keywords in einer Suchanwendung vom übrigen Text unterscheidbar machen möchte. Ein anderer typischer Anwendungsfall ist das Darstellen von Titeln in Großbuchstaben.

Falls man einen String in Großbuchstaben umwandeln möchte, kann man die Funktion strtoupper() verwenden. Diese Funktion hat jedoch den Nachteil, dass sie vom Gebietsschema (setlocale) abhängig ist und insbesondere in der Zeichenkodierung UTF-8 bei den Multibyte-Zeichen nicht richtig funktioniert. Beispielsweise kann es passieren, dass die Umlaute nicht umgewandelt werden, da die Kleinbuchstaben nicht zu den entsprechenden Großbuchstaben zugeordnet werden.

<?php

$str = 'äöü';

// Ausgabe äöü
echo strtoupper($str);

?>

Falls man eine Zeichenkodierung mit Multibyte-Zeichen verwendet, kann man die Funktion mb_strtoupper() verwenden, damit z.B. auch die Umlaute ordnungsgemäß umgewandelt werden. Die Parameter der Funktion werden wie folgt gesetzt.

  1. Die Zeichenkette, die in Großbuchstaben umgewandelt werden soll (string).
  2. Die Zeichenkodierung (encoding, optional).

Im folgenden Beispielcode wird als zweiter Parameter UTF-8 angegeben und die Umwandlung der Umlaute funktioniert.

<?php

$str = 'äöü';

// Ausgabe ÄÖÜ
echo mb_strtoupper($str, 'UTF-8');

?>

Ein Nachteil von mb_strtoupper() ist die Performance. Wenn man die PHP-Anwendung auf Schnelligkeit trimmen möchte, kann es daher von Vorteil sein, eine eigene Funktion zu schreiben und auf mb_strtoupper() zu verzichten. Ein Beispielcode für eine eigene Funktion ist unter strtoupper_utf8() zu finden.

Es kann auch sein, dass man auf die Funktion mb_strtoupper() verzichten muss, da hierfür die PHP-Erweiterung mbstring auf dem Server vorausgesetzt wird und das ist nicht immer der Fall. Ob die Erweiterung zur Verfügung steht, kann mit der Funktion phpinfo() ermittelt werden.

Der zweite Parameter ist optional und man könnte auf die Angabe der Zeichenkodierung auch verzichten. In solchen Fällen gilt die interne Zeichenkodierung. Falls diese unbekannt ist, kann man die Funktion mb_internal_encoding() verwenden und den Rückgabewert ausgeben lassen.

<?php

echo mb_internal_encoding();

?>

Falls man die interne Zeichenkodierung so setzen möchte, dass man auf die Angabe des zweiten Parameters verzichten kann, ist ab der PHP Version 5.6 vorgesehen, in der PHP-Konfigurationsdatei php.ini den Eintrag default_charset anzupassen. Es ist auch möglich, in der php.ini den Eintrag mbstring.internal_encoding anzupassen. Diese Funktion gilt jedoch ab PHP 5.6 genauso wie mb_intenal_encoding als deprecated und soll daher für die Festlegung der internen Zeichenkodierung nicht verwendet werden.

Um die unterstützten Zeichenkodierungen zu ermitteln, kann man die Funktion mb_list_encodings() verwenden.

<?php

$encodings = mb_list_encodings();

foreach ($encodings as $wert)
{
  echo $wert . '<br>';
}

?>

Als Rückgabewert erhält man bei mb_list_encodings() ein Array, der mit unterschiedlichen Funtionen ausgelesen werden kann. In diesem Beispiel geschieht das durch eine foreach-Schleife und die Werte werden untereinander ausgegeben.