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 abspeichern

    Damit 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.


Anmelden zum Antworten