Frage

Es gibt keine Multibyte ‚Preg‘ verfügbaren Funktionen in PHP, so bedeutet das, dass die Standard preg_functions sind alle mb sicher? Kann keine Erwähnung in der PHP-Dokumentation finden.

War es hilfreich?

Lösung

kann PCRE UTF-8 und andere Unicode-Codierung, aber es hat bei der Kompilierung angegeben werden. Von der Manpage für PCRE 8.0 :

  

Die aktuelle Implementierung von PCRE entspricht in etwa mit Perl 5.10, einschließlich der Unterstützung für UTF-8 kodierten Strings und Unicode allgemeine Kategorie Eigenschaften. Allerdings UTF-8 und Unicode-Unterstützung muss explizit aktiviert werden; es ist nicht der Standard. Die Unicode-Tabellen entsprechen Unicode-Release 5.1.

PHP verwendet derzeit PCRE 7.9 ; Ihr System könnte eine ältere Version besitzen.

Ein Blick auf die PCRE lib , die mit PHP 5.2 kommt, scheint es, dass es so konfiguriert Unicode Eigenschaften und UTF-8 zu unterstützen. Das Gleiche gilt für die 5.3 Zweig .

Andere Tipps

pcre unterstützt utf8 der Box, siehe Dokumentation für das 'u' Modifikator.

Illustration (\ xC3 \ XA4 ist die UTF-8-Codierung für den Deutsch Buchstaben "ä")

  echo preg_replace('~\w~', '@', "a\xC3\xA4b");

Diese Echos "@@ ¤ @", weil "\ xC3" und "\ XA4" wurden als unterschiedliche Symbole behandelt

  echo preg_replace('~\w~u', '@', "a\xC3\xA4b");

(beachten Sie die 'u') druckt "@@@", weil "\ xC3 \ XA4" als einzelner Buchstabe behandelt wurden.

Nein, sie sind es nicht. Sehen Sie sich die Frage preg_match und UTF-8 in PHP zum Beispiel.

Nein, müssen Sie die verwenden Multibyte-String-Funktionen wie mb_ereg

Einige meiner mehr kompliziert preg Funktionen:

(1a) Validieren Benutzername als alphanumerischer + Strich:

preg_match('/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/',$username) 

(1b) möglich UTF Alternative:

preg_match('/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/u',$username) 

(2a) validate E-Mail:

preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix",$email))

(2b) möglich UTF Alternative:

preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ixu",$email))

(3a) Normalisieren newlines:

preg_replace("/(\n){2,}/","\n\n",$str);

(3b) möglich UTF Alternative:

preg_replace("/(\n){2,}/u","\n\n",$str);

Do thse Änderungen aussehen in Ordnung?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top