Ich benutze mb_substr() um strings für Diagnosezwecke in einzelne Zeichen zu zerlegen.
Diese Strings können bei meiner Anwendung vom Grundsatz beliebige Byte-Sequenzen sein.
Das Verhalten von mb_substr() für solche Byte-Sequenzen ist nach meiner Kenntnis nicht dokumentiert.
Wenn doch, bitte hier die Links dazu posten.
Vorab: Ist hier zwar unter Fortgeschritten, kann jedoch nicht schaden um Missverständnisse zu vermeiden.
Was verstehe ich unter invaliden UTF-8 Strings?
Valide UTF-8 Strings ist das womit wir gewöhnlich arbeiten:
Um diesen String auf UTF8 zu validieren gibt es eine einfache Möglichkeit:
Invalide UTF-8 strings entstehen wenn valide Strings falsch verarbeitet werden.
Als einfaches Beispiel wenn ich so versuche das letzte Zeichen zu entfernen:
Solche invaliden UTF-8-Strings bereiten dann oft auch Profis massive Probleme an Stellen wo sie nicht vermutet werden.
Mir geht es speziell um das folgende Verhalten von mb_substr() womit auch Bytesequenzen geliefert werden die kein UTF-8 Zeichen sind.
Beispiel:
Bin dankbar für alle Erfahrungen und Hinweise zu diesen Verhalten von mb_substr.
Diese Strings können bei meiner Anwendung vom Grundsatz beliebige Byte-Sequenzen sein.
Das Verhalten von mb_substr() für solche Byte-Sequenzen ist nach meiner Kenntnis nicht dokumentiert.
Wenn doch, bitte hier die Links dazu posten.
Vorab: Ist hier zwar unter Fortgeschritten, kann jedoch nicht schaden um Missverständnisse zu vermeiden.
Was verstehe ich unter invaliden UTF-8 Strings?
Valide UTF-8 Strings ist das womit wir gewöhnlich arbeiten:
PHP-Code:
$str = "aäö€";
PHP-Code:
$isValidUTF8 = (bool)preg_match('//u',$str);
Als einfaches Beispiel wenn ich so versuche das letzte Zeichen zu entfernen:
PHP-Code:
$str = substr("aäö€",0,-1); //Das ist falsch!
$isValidUTF8 = (bool)preg_match('//u',$str);
var_dump($isValidUTF8, $str);
//bool(false) string(7) "aäö��"
Mir geht es speziell um das folgende Verhalten von mb_substr() womit auch Bytesequenzen geliefert werden die kein UTF-8 Zeichen sind.
Beispiel:
PHP-Code:
$invalidUTF8Str = substr("aäö€",0,-1);
$subStr = mb_substr($invalidUTF8Str,3,1);
var_dump($subStr); //string(2) "��"
Kommentar