webentwicklung-frage-antwort-db.com.de

Ich habe eine Zeichenfolge mit "\ u00a0" und muss sie ersetzen, indem str_replace "" fehlschlägt

Ich muss eine Zeichenfolge bereinigen (kopieren/einfügen) aus verschiedenen Microsoft Office-Suite-Anwendungen ( Excel , Access und Word ) mit jeweils eigenen Codierungen.

Ich benutze json_encode für Debugging-Zwecke, um jedes einzelne codierte Zeichen sehen zu können.

Ich kann alles was ich bisher gefunden habe (\ r\n) mit str_replace reinigen, aber mit\u00a0 habe ich kein Glück.

$string = '[email protected]\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;[email protected]'; //this is the output from json_encode

$clean = str_replace("\u00a0", "",$string);

kehrt zurück:

[email protected]\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;[email protected]

Das ist genau das gleiche; es ignoriert vollständig\u00a0.

Gibt es da einen Weg? Außerdem habe ich das Gefühl, dass ich das Rad neu erfunden habe. Gibt es eine Funktion/Klasse, die JEDES mögliche Zeichen JEDER möglichen Codierung vollständig entfernt?

____BEARBEITEN____

Nach den ersten beiden Antworten muss ich klarstellen, dass mein Beispiel funktioniert, denn es ist die Ausgabe von json_encode, nicht die eigentliche Zeichenfolge!

17
0plus1

Funktioniert für mich, wenn ich Ihren Code kopiere/einfügen. Versuchen Sie, die Anführungszeichen in Ihrer str_replace() durch einfache Anführungszeichen zu ersetzen oder den Backslash ("\\u00a0") zu umgehen.

5

Durch die Kombination von ord() mit substr() in meiner Zeichenfolge, die\u00a0 enthält, habe ich den folgenden Fluch gefunden:

$text = str_replace( chr( 194 ) . chr( 160 ), ' ', $text );
45
Arne

Ich hatte gerade das gleiche Problem. Anscheinend gibt PHPs json_encode für jeden String mit einem "geschützten Leerzeichen" null zurück.

Die Lösung besteht darin, dies durch ein reguläres Leerzeichen zu ersetzen:

str_replace(chr(160),' ');

Ich hoffe, das hilft jemandem - ich habe eine Stunde gebraucht, um das herauszufinden.

4
Jeremy Jacob

Ein untergeordneter Punkt:\u00a0 ist eigentlich ein Zeichen ohne Leerzeichen, c.f. http://www.fileformat.info/info/unicode/char/a0/index.htm

Es könnte also korrekter sein, es durch "" zu ersetzen.

2

Sie müssen dies mit einfachen Anführungszeichen wie folgt tun:

str_replace('\u00a0', "",$string);

Oder, wenn Sie doppelte Anführungszeichen verwenden möchten, müssen Sie den Backslash entziehen. Dies würde folgendermaßen aussehen:

str_replace("\\u00a0", "",$string);
1
oezi

Das funktioniert auch, ich habe irgendwo gefunden

$str = trim($str, chr(0xC2).chr(0xA0));
1

Das hat den Trick für mich gemacht: 

$str = preg_replace( "~\x{00a0}~siu", " ", $str );
0
patrick