Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03651.jsonl.gz/2575

PHP und Multibyte Strings oder: Meine kleine String Klasse
Also ich vor einiger Zeit ein wenig mit Ruby rumspielte, kam ich auf die Idee eine String-Klasse für PHP zu schreiben. Heute stöberte ich im Blog von Benjamin Hofmann rum und fand dabei seinen pragmatischen Ansatz für eine String Klasse. Dies motivierte mich auch meinen Versuch zu präsentieren.
In PHP ist ein String eine Reihe von Bytes, wobei ein Byte einem Zeichen entspricht. Das Problem ist, dass ein Byte nur 256 unterschiedliche Zustände haben kann. Ergo können nur 256 unterschiedliche Zeichen dargestellt werden. Bis PHP 6 dann gross mit Unicode auftrumpfen wird, müssen sich alle nicht-amerikanischen PHP Entwickler selber helfen.
Multibyte-Strings in PHP
Schauen wir uns z.B. folgendes Code-Snippet in einer UTF-8 Datei (womit wir ja hoffentlich alle arbeiten) an:
echo strlen('ä');</pre>
Die Ausgabe ist nicht etwa
1, sondern
2, da zur Speicherung das ä-Zeichens zwei Bytes benötigt werden. Als Abhilfe stehen drei Möglichkeiten zur Verfügung.
mbstring Erweiterung
echo mb_strlen('ä'); // 1
Die
mbstring Erweiterung wird direkt mit PHP ausgeliefert und bietet Multibyte-Alternativen für viele native String Funktionen. Die Portierbarkeit ist dadurch ziemlich gut, allerdings werden nicht sehr viele Character Sets unterstützt. Mit der Konfigurationsdirektive
mbstring.funcoverload lassen sich ausserdem die nativen String Funktionen durch alle vorhandenen
mbstring-Äquivalente "überladen" (an Stelle von
strpos() wird automatisch
mbstrpos() aufgerufen).
mbstring eignet sich dadurch sehr gut zum Arbeiten mit Strings.
iconv Erweiterung
echo iconv_strlen('ä'); // 1
Die
iconv Erweiterung wird standardmässig nicht mit PHP ausgeliefert und ist deshalb auch nicht auf allen Systemen automatisch vorhanden. Ausserdem gibt es wenige Funktionen zum Arbeiten mit Multibyte-Stringen. Weil die
iconv Erweiterung aber viele Character Sets unterstützt, eignet sie sich hervorragend zum Konvertierten von einem Encoding ins andere.
UTF-8 Dekodierung
echo strlen(utf_decode('ä')); // 1
Solange eine Seite - und damit meine ich sowohl Code als auch Files, Datenbank, Formulardaten, etc. - in UTF-8 betrieben wird, ist die Benutzung der nativen String Funktionen relativ sicher möglich. Man sollte einfach schauen, dass die UTF-8 Strings zuerst mit
utf8_decode() in ISO-8859-1 Strings konvertiert werden.
Auf der nächsten Seite geht es weiter mit meiner String Implementierung ...
Ähnliche Artikel
- Deferred Statements
- Schlichte Passwort Hashing API in PHP 5.5
- php_memcache.dll und php_apc.dll für PHP 5.4