Direkt entliehen von hier und ein schönes Beispiel für PHPs Handling mit Unicode-Zeichen:
1 2 3 4 5
| <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:
1 2 3 4 5
| <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:
1 2 3 4
| <?php
$a = 'äa';
echo "strlen: " . strlen($a) . "<br />"; //3
echo "mb_strlen: " . mb_strlen($a, "UTF-8") . "<br />"; //2 |
Schon besser:
1 2 3 4 5
| <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.
Weitere Posts:
Dieser Beitrag wurde unter
php,
PHP-WTF,
webdev veröffentlicht. Setze ein Lesezeichen auf den
Permalink.
Ich mach sicherheitshalber immer
, 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.