In PHP & lt; 6, was ist der beste Weg, um eine Zeichenfolge in ein Array von Unicode-Zeichen zu teilen? Wenn die Eingabe nicht unbedingt UTF-8 ist?
Ich möchte wissen, ob die Menge der Unicode-Zeichen in einer Eingabezeichenfolge eine Teilmenge einer anderen Gruppe von Unicode-Zeichen ist.
Warum nicht direkt auf die mb_
-Familie von Funktionen zugreifen, wie die ersten paar Antworten nicht?
Sie könnten den Modifikator 'u' mit PCRE regex verwenden; siehe Mustermodifikatoren (Zitat):
u (PCRE8)
Dieser Modifikator wird zusätzlich aktiviert Funktionalität von PCRE, das ist inkompatibel mit Perl. Muster Zeichenfolgen werden wie UTF-8 behandelt. Dies Modifikator ist ab PHP 4.1.0 verfügbar oder größer unter Unix und ab PHP 4.2.3 auf win32. UTF-8-Gültigkeit des Muster wird seit PHP 4.3.5 überprüft.
Betrachten wir zum Beispiel diesen Code:
%Vor%Sie erhalten ein unbrauchbares Ergebnis:
%Vor%Aber mit diesem Code:
%Vor%(Beachten Sie das 'u' am Ende der Regex)
Sie bekommen, was Sie wollen:
%Vor%Hoffe das hilft: -)
Wenn aus irgendeinem Grund der Regex-Weg nicht genug für Sie ist. Ich habe einmal die Zend_Locale_UTF8
geschrieben, die aufgegeben wird, aber könnte Ihnen helfen, wenn Sie sich entscheiden, es auf eigene Faust zu tun.
Sehen Sie sich insbesondere die Klasse Zend_Locale_UTF8_PHP5_String
, das Unicode-Strings liest und mit ihnen arbeitet, teilt sie in einzelne Zeichen auf (die natürlich aus mehreren Bytes bestehen können).
BEARBEITEN : Ich habe gerade erwähnt, dass der svn-Browser von ZF down ist, also kopierte ich die wichtigen Methoden aus Gründen der Bequemlichkeit:
%Vor% Ich war in der Lage, eine Lösung mit mb_*
zu schreiben, einschließlich einer Reise nach UTF-16 und zurück in einem wahrscheinlich albernen Versuch, die String-Indizierung zu beschleunigen:
Ich hatte mehr Glück, mb_internal_encoding
zu vermeiden und einfach alles bei jedem mb_*
Call anzugeben. Ich bin mir sicher, dass ich die preg
Lösung verwenden werde.