Direkt entliehen von hier und ein schönes Beispiel für PHPs Handling mit Unicode-Zeichen:
<meta charset="utf8"> <?php $a = 'äa'; echo "with space: " . $a[0] . " " . $a[1] . "<br />"; //� � echo "without space: " . $a[0] . $a[1] . "<br />"; //ä
bzw. analog dazu:
<meta charset="utf8"> <?php $a = 'äa'; echo "substr 0,1: " . substr($a, 0, 1) . "<br />"; //� echo "substr 0,2: " . substr($a, 0, 2) . "<br />"; //ä
Klar: Das ä belegt 2 Byte:
<?php $a = 'äa'; echo "strlen: " . strlen($a) . "<br />"; //3 echo "mb_strlen: " . mb_strlen($a, "UTF-8") . "<br />"; //2
Schon besser:
<meta charset="utf8"> <?php $a = 'äa'; echo "mb_substr 0,1: " . mb_substr($a, 0, 1, "UTF-8") . "<br />"; //ä echo "mb_substr 0,2: " . mb_substr($a, 0, 2, "UTF-8") . "<br />"; //äa
Mir war das zwar im Prinzip schon alles klar, durch so ein Beispiel wird aber nochmal deutlich, dass man die nicht-mb_* – Funktionen partout meiden sollte.
Ich mach sicherheitshalber immer
mb_internal_encoding("utf-8");
, aber dafür muss man auch einen Editor haben, der UTF-8 schreibt. :-)Gute Ergänzung, danke.
Kann man sich immerhin das wiederholte „UTF-8“ als letzten Parameter der mb_* – Funktionen sparen.
Falls man code hat der auf den str Funktionen basiert kann man diese via .ini mit den mb_str funktionen überladen mit mbstring.func_overload = 1 siehe http://ch.php.net/manual/de/mbstring.configuration.php . Das kann eine Menge Refactoring ersparen.