Funktion mb_strtolower() - In Kleinbuchstaben umwandeln in UTF-8

Zeichenketten werden in PHP-Programmen häufig in Kleinbuchstaben umgewandelt. Beispielsweise spielt die Groß- und Kleinschreibung bei E-Mailadressen keine Rolle und gewöhnlich werden sie in Kleinbuchstaben geschrieben. Damit sie einheitlich sind, kann man die Zeichen in Kleinbuchstaben umwandeln. Ein anderer typischer Anwendungsfall wäre eine Suchfunktion, bei der die Keywords in Kleinbuchstaben in der Datenbank abgelegt werden sollen.

Für solche Umwandlungsaufgaben gibt es in PHP die Funktion strtolower(). Der Nachteil hierbei ist, dass sogenannte Multibyte-Zeichen wie z.B. die Umlaute nicht korrekt zu den Großbuchstaben zugeordnet werden, insbesondere in der Zeichenkodierung UTF-8. Beim folgenden Beispiel werden die Zeichen Ä, Ö und Ü nicht in Kleinbuchstaben umgewandelt.

<?php

$str = 'ÄäÖöÜü';

// Ausgabe ÄäÖöÜü
echo strtolower($str);

?>

In solchen Fällen sollte die Multibyte-Funktion mb_strtolower() verwendet werden. Bei der Verwendung dieser Funktion ist es möglich, auch die Zeichenkodierung anzugeben. Beim Funktionsaufruf werden die Parameter wie folgt festgelegt.

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

Beim folgenden Beispiel werden auch die Umlaute korrekt in Kleinbuchstaben umgewandelt. Als Zeichenkodierung wurde hierbei UTF-8 verwendet und mit dem zweiten Parameter der Funktion übergeben.

<?php

$str = 'ÄäÖöÜü';

// Ausgabe ääööüü
echo mb_strtolower($str, 'UTF-8');

?>

Wie die anderen Multibyte-Funktionen kann mb_strtolower() nur verwendet werden, wenn die Erweiterung mbstring auf dem Server zur Verfügung steht. Falls man überprüfen möchte, ob man die Erweiterung verwenden kann, kann man die Funktion phpinfo() verwenden.

Falls mbstring nicht zur Verfügung steht, kann man auch eine eigene Funktion schreiben, mit der die Umlaute (oder andere Zeichen) in Kleinbuchstaben umgewandelt werden. Ein Beispielcode ist unter strtolower_utf8() zu finden, der angepasst werden kann. Die Funktion mb_strtolower() ist nicht sehr schnell, sodass man auch aus Gründen der Performance darauf verzichten und eine eigene Funktion schreiben kann.

Wenn über den zweiten Parameter die Zeichenkodierung nicht angegeben wird, dann gilt die interne Zeichenkodierung. Falls diese unbekannt ist, kann man den Rückgabewert der Funktion mb_internal_encoding() ausgeben lassen.

<?php

echo mb_internal_encoding();

?>

Sollte die interne Zeichenkodierung nicht dem gewünschten entsprechen, kann man die PHP-Konfigurationsdatei php.ini anpassen und z.B. den Eintrag mbstring.internal_encoding = UTF-8 eingeben. Für die Änderung der internen Zeichenkodierung ist ab PHP 5.6 vorgesehen, den Eintrag default_charset anzupassen. Die Funktionen mb_internal_encoding und mbstring.internal_encoding sollen ab PHP 5.6 nicht mehr verwendet werden, um die interne Zeichenkodierung zu ändern, da sie als deprecated gelten.

Welche Zeichenkodierungen unterstützt werden, kann man mit mb_list_encodings() ermitteln.

<?php

$encodings = mb_list_encodings();

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

?>

Der Rückgabewert von mb_list_encodings() ist ein Array. Für die Ausgabe des Rückgabewerts wird in diesem Beispiel daher eine foreach-Schleife verwendet und die Zeichenkodierungen werden untereinander ausgegeben.