2016-05-06 8 views
1

Ich konvertiere eine PHP/Mariab Web-Anwendung von latin1 zu utf-8. Ich habe es funktioniert, aber ich benutze nicht die/u Schalter auf meine preg_ Aussagen und es scheint gut zu funktionieren. Ich habe Proben von Russisch, Chinesisch traditionell und einfach, Japanisch, Arabisch, Hindu versucht. Teil der Anwendung ist ein Wiki, das ausführliche Anweisungen verwendet und es funktioniert auch gut.PHP preg_/u utf-8 switch - Nicht verstehen, was es in der Praxis tut

Also was soll der preg/u Schalter tun? ... da es ohne es gut zu funktionieren scheint?

Ich habe Informationen für 2 Wochen nachschlagen, und ich kann nichts finden, das den/u-Schalter in einer Weise erklärt, die seine Verwendung von "nicht" unterscheidet.

Ich habe festgestellt, dass ich die utf-8 pcre Funktionen in der prce, dass mein php verwendet. Ich benutze PHP v5.6.20, MariaDB 5.5.32. Ich habe meine Webseiten, mysql-Treiber und Mariadb alle mit utf-8.

Antwort

0

Der Modifikator u wird von PCRE verwendet, um zu entscheiden, wie bestimmte Übereinstimmungsfälle behandelt werden. Zum Beispiel mit dem Punkt metacharacter werden mehrere Bytes zulässig, vorausgesetzt, sie eine gültige UTF-8-Sequenz bilden:

preg_match('/^.$/', '老'); // 0 
preg_match('/^.$/u', '老'); // 1 

Ein weiteres Beispiel, wenn man bedenkt, was durch eine Zeichenklasse bedeckt ist:

preg_match('/^[[:print:]]$/', '老'); // 0 
preg_match('/^[[:print:]]$/u', '老'); // 1 

Wenn UTF-8 (oder tatsächlich eine in einer anderen Kodierung codierte Zeichenfolge) direkt in die Regex eingefügt wird, macht der Modifikator u keinen Unterschied, da PCRE schließlich Byte für Byte übereinstimmt.

+0

Oh! OK. Ich verstehe jetzt. Es wirkt sich auf das Metazeichen aus! Das ist die Unterscheidung, die ich nicht verstand. Es macht jetzt Sinn, da die anderen Modifikatoren (gsi) auch beeinflussen, wie der Metazeichen-Abgleich funktioniert. Danke für die Klarstellung. Du hast meinen Tag gerettet! :-) –