Was ist der beste Weg, um eine Zeichenkette in ein Array von Unicode-Zeichen in PHP aufzuteilen?

8

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?

    
joeforker 08.09.2009, 21:31
quelle

5 Antworten

14

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: -)

    
Pascal MARTIN 08.09.2009, 21:39
quelle
6

Etwas einfacher als preg_match_all :

%Vor%

Damit erhalten Sie ein 1-dimensionales Array von Zeichen zurück. Kein Match-Objekt erforderlich.

    
mpen 26.05.2015 20:33
quelle
5

Versuchen Sie Folgendes:

%Vor%     
JasonWoof 08.09.2009 21:35
quelle
1

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%     
André Hoffmann 08.09.2009 21:52
quelle
0

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:

%Vor%

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.

    
joeforker 09.09.2009 01:23
quelle

Tags und Links