mb_strrev - Multibyte-String umkehren
Februar 2011
PHP, bzw. dessen Multibyte-Extension, stellt keine Funktion zu Verfügung, mit welcher man die Zeichen in Strings umdrehen kann, sodass das erste Zeichen am Ende und das letzte Zeichen am Anfang steht.
Bei Single-Byte-Strings, wie man sie unter ASCII oder ISO-8859 hat, lässt sich die Funktion strrev() benutzen, aber UTF-8-Texte werden dadurch "zerschossen".
Mit folgendem Einzeiler lassen sich allerdings alle Zeichenketten umdrehen, egal in welcher Kodierung sie sind:
Beispiel-Anwendung:
Der Trick liegt darin, den String nach UTF-16 Big Endian zu codieren. Wenn man strrev() auf UTF-16 Big Endian anwendet, erhält man einen String in der Kodierung UTF-16 Little Endian, welchen man dann wieder in die ursprüngliche Kodierung umwandeln kann.
Bei Single-Byte-Strings, wie man sie unter ASCII oder ISO-8859 hat, lässt sich die Funktion strrev() benutzen, aber UTF-8-Texte werden dadurch "zerschossen".
Mit folgendem Einzeiler lassen sich allerdings alle Zeichenketten umdrehen, egal in welcher Kodierung sie sind:
<?php
function mb_strrev($str, $encoding='UTF-8'){
return mb_convert_encoding( strrev( mb_convert_encoding($str, 'UTF-16BE', $encoding) ), $encoding, 'UTF-16LE');
}
?>
Beispiel-Anwendung:
<?php
$str = 'Rückwärts!';
echo mb_strrev($str, 'UTF-8');
// Ergibt: !sträwkcüR
?>
Der Trick liegt darin, den String nach UTF-16 Big Endian zu codieren. Wenn man strrev() auf UTF-16 Big Endian anwendet, erhält man einen String in der Kodierung UTF-16 Little Endian, welchen man dann wieder in die ursprüngliche Kodierung umwandeln kann.
