Wenn Sie einfach den /u
Modifikator hinzufügen, wird das Muster soll als utf-8
behandelt werden. Das zweite Beispiel funktioniert, weil:
- Seit PHP 5.1 können Sie
\p{L}
verwenden, die übersetzt werden können: „ist jede Art von Brief von jeder Sprache.“
- Zusätzlich zu der Standardnotation, \ p {L}, Java, Perl, PCRE und jetzt PHP können Sie die Kurzschrift verwenden
\pL
. Die Kurzschrift funktioniert nur mit Unicode-Eigenschaften aus einem Buchstaben.
UPDATE: Warum preg_replace('/(?=.)/u', '!', 'آرد'); //returns '!�!�!�!�!�!�'??
Wie @MarkFox sagt, der Grund ist, weil im Rahmen der preg_replace()
es ein Byte pro Zeichen und die Zeichen setzt voraus, Sie "RegExing" sind multibyte . Deshalb hat Ihre Ersetzungsausgabe die doppelte Übereinstimmung, die Sie erwarten würden. Sie entspricht jedem Byte jedes Zeichens (was zwei Byte ergibt) Unicode character properties, damit das funktioniert.
Was ist mit diesem seltsamen Symbol?
Wenn Sie sehen, dass „weird quadratisches Symbol mit einem Fragezeichen in“ anders als Ersatz CHARACTER bekannt, dass in der Regel ein Indikator, dass Sie ein Byte im Bereich von 80-FF haben (128-255) und die System versucht, es in UTF-8
zu rendern.
Das gesamte Byte-Bereich für Single-Byte-Zeichen in UTF-8
ungültig ist, aber alle sind sehr häufig in der westlichen Kodierungen wie ISO-8859-1
.
Was ist das @ tun in der PHP-Version? Sollte es nicht auch "/(?=.)/" sein? Ich frage aufrichtig, wie ich das vorher nicht gesehen habe. – kufudo
'@' ist ungültiges Trennzeichen. Überprüfen Sie die Trennzeichen-Seite von [PHP] (http://www.php.net/manual/en/regexp.reference.delimiters.php). – hjpotter92
@BackinaFlash Es ist gültig! – PHPst