non-breaking utf-8 0xc2a0 Raum und preg_replace seltsames Verhalten
In meinem string habe ich utf-8 non-breaking space (0xc2a0) und ich möchte es ersetzen mit etwas anderem.
Wenn ich
$str=preg_replace('~\xc2\xa0~', 'X', $str);
funktioniert es.
Aber wenn ich
$str=preg_replace('~\x{C2A0}~siu', 'W', $str);
non-breaking-space nicht gefunden (und ersetzt).
Warum? Was ist falsch an der zweiten regexp?
Format \x{C2A0}
ist richtig, auch ich verwendet u
Flagge.
InformationsquelleAutor der Frage DamirR | 2012-10-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eigentlich die Dokumentation über escape-Sequenzen in PHP ist falsch. Wenn Sie
\xc2\xa0
syntax, es wird nach UTF-8 Zeichen. Aber mit\x{c2a0}
syntax, es versucht zu konvertieren Unicode-Sequenz UTF-8-codierten Zeichen.Einen non breaking space ist
U+00A0
(Unicode) codiert aber alsC2A0
in UTF-8. Also, wenn Sie versuchen, mit dem Muster~\x{00a0}~siu
es wie erwartet funktionieren wird.InformationsquelleAutor der Antwort Newbo.O
Habe ich aggegate bisherigen Antworten, damit die Menschen können auch einfach kopieren /fügen Sie den folgenden code, um wählen Sie Ihre Lieblings-Methode :
InformationsquelleAutor der Antwort hugsbrugs
Den zwei codes, die verschiedene Dinge tun meiner Meinung nach: die erste \xc2\xa0 ersetzen von ZWEI Zeichen, \xc2 \xa0 nichts.
In utf-8-Codierung, in diesem Fall für den codepoint U+geschützte Leerzeichen 00A0
nicht \x{geschützte Leerzeichen 00A0} Arbeit ? Dies sollte die Darstellung für \xc2\xa0
InformationsquelleAutor der Antwort DThought
Habe ich nicht auf diese Variante
~\x{c2a0}~siu
.Varian
\x{00A0}
funktioniert. Ich habe nicht versucht, die zweite option und hier ist das Ergebnis:Ich habe versucht es zu konvertieren in hex und replace no-break space
0xC2 0xA0 (c2a0)
Raum0x20 (20)
.Code:
InformationsquelleAutor der Antwort Pali
/\x{geschützte Leerzeichen 00A0}/, /\xC2\xA0/und $clean_hex2bin-str_replace-bin2hex gearbeitet und hat nicht funktioniert. Wenn ich es ausgedruckt auf dem Bildschirm, es ist alles gut, aber wenn ich versuchte, in eine Datei speichern, die Datei wäre leer!
Landete ich mit iconv('UTF-8', 'ISO-8859-1//IGNORE', $str);
InformationsquelleAutor der Antwort EllisGL