PHP: Viele Multibyte-Funktionen fehlen, und jetzt?
-
Hi!
Was tun, wenn es eine Funktion nicht als mb_ gibt? Selbst mit regular expressions schreiben? Das kann es doch nicht sein!
Ich hab gelesen, dass man einige normale Byte-Funktionen auch mit Multibyte-Strings verwenden kann.zB. trim(), weil es eh nur ASCII Zeichen entfernt (Solange man nichts anderes angibt).
Aber wie ist es zB. mit explode()?
Das da...
$str = "ồΩẻ"; $exp = explode("Ω", $str); print_r($exp);
...gibt wie gewollt Array ( [0] => ồ [1] => ẻ ) aus.
Aber warum?
-
UTF-8, Die Achillessehne von PHP 5.x und früher.
Im Großen und Ganzen ist der UTF-8 Support mangelhaft, unvollständig und oft falsch bis gar nicht dokumentiert. In PHP 6.0 wird das natürlich alles schönes-besser-toller(tm) aber bis dahin:
- HTML Ausgabe auf Unicode stellen
- DB auf Unicode Felder stellen
- HTML-Dateien im Unicode Format abspeichernDamit kann man 60% aller Fehler beheben. Wenn es dann um Stringmanipulationen direkt geht, stehen teilweise einige mb_* Funktionen zur Verfügung (mit oben genannten Nachteilen). Alternativ kann man mit utf8_de|encode die Strings konvertieren, damit arbeiten, und sie dann wieder zurückkonvertieren. Ist fieser als es sich anhört, gerade wenn man dann noch mit Javascript auf seine Daten zugreifen möchte.
-
Headhunter schrieb:
Alternativ kann man mit utf8_de|encode die Strings konvertieren, damit arbeiten, und sie dann wieder zurückkonvertieren. Ist fieser als es sich anhört, gerade wenn man dann noch mit Javascript auf seine Daten zugreifen möchte.
utf8_decode konvertiert aber nur nach ISO-8859-1. Das funktioniert also nur für ganz bestimmte Sprachen. Nichtmal das Euro-Zeichen ist enthalten, von asiatischen Schriftzeichen ganz zu schweigen.
-
Ach man, es ist doch schon längst Zeit für ordentlichen Unicode-Support.
Wo bleibt nur PHP v6?Jedenfalls habe ich nun hier gelesen, dass zB. explode() keine Probleme machen sollte: http://www.phpwact.org/php/i18n/utf-8#explode
Allerdings frage ich mich, ob man immer von einem "well formed" utf8 string ausgehen kann, wenn es sich um Benutzereingaben handelt.
-
Ursprünglich sollte PHP 5.3 UTF8-kompatibel sein. War dann aber zu verbuggt und das Team hat sich entschlossen den UTF8-Support auf V.6 zu verschieben.