Ich habe eine Zeichenfolge mit „\u00a0“ und muss sie durch „“ ersetzen. str_replace schlägt fehl

Lesezeit: 4 Minuten

Benutzer-Avatar
0plus1

Ich muss eine Zeichenfolge bereinigen, die aus verschiedenen Microsoft Office-Suite-Anwendungen (kopiert/eingefügt) stammt (Excel, Zugangund Wort), jede mit ihrem eigenen Codierungssatz.

Ich verwende 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 bereinigen, 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 dasselbe; es ignoriert vollständig \u00a0.

Gibt es eine Möglichkeit, dies zu umgehen? Außerdem habe ich das Gefühl, dass ich das Rad neu erfinde. Gibt es eine Funktion/Klasse, die JEDES mögliche Zeichen von JEDER möglichen Codierung vollständig entfernt?

____BEARBEITEN____

Nach den ersten beiden Antworten muss ich klarstellen, dass mein Beispiel funktioniert, weil es die Ausgabe von json_encode ist, nicht die tatsächliche Zeichenfolge!

Benutzer-Avatar
Arne

Durch Kombinieren ord() mit substr() Auf meiner Zeichenfolge mit \u00a0 fand ich den folgenden Fluch, der funktionierte:

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

  • Vielen Dank! das hat mir viel zeit gespart. "\xc2\xa0" funktioniert auch.

    – Elipultorak

    31. August 2015 um 11:32 Uhr

  • jap hat bei mir funktioniert. Ich versuche, Daten von einer Website mit französischem Text zu löschen.

    – Manikandan Arunachalam

    13. April 2016 um 16:02 Uhr

Versuche dies:

$str = str_replace("\u{00a0}", ' ', $str);

  • Ich glaube du hast die Frage falsch verstanden.

    – Dharman

    27. Dezember 2019 um 23:18 Uhr

  • Vielen Dank. Das ist die korrekte Notation nach: php.net/manual/de/… beim Ersetzen des Unicodes. Die Frage von OP bezog sich auf wörtlich \u00a0 Saiten, aber das war es, was ich wollte

    – Benutzer3342816

    21. März 2020 um 6:07 Uhr

  • Dies ist das Einzigartige, das für mich richtig funktioniert hat.

    – Gabriel Veiga Cardoso

    24. Januar um 23:53 Uhr

Funktioniert für mich, wenn ich Ihren Code kopiere / einfüge. Versuchen Sie, die doppelten Anführungszeichen in Ihrem zu ersetzen str_replace() mit einfachen Anführungszeichen oder dem Backslash ("\\u00a0").

  • In Ihrem Beispiel funktioniert es, weil Sie die Ausgabe von json_encode verwenden, nicht die tatsächliche Zeichenfolge! Wenn ich meinen Code kopiere, funktioniert es sogar für mich perfekt.

    – 0plus1

    7. April 2010 um 13:01 Uhr

  • Was passiert, wenn Sie ersetzen \xa0 statt \u00a0?

    – Annika Backström

    7. April 2010 um 13:23 Uhr


  • Das passiert. Es löscht die Instanzen von \u00a0 und wenn es von json_encode gedruckt wird, sieht es in Ordnung aus, aber wenn ich die Zeichenfolge ohne json-Codierung wiedergebe, bekomme ich ein �, wo vorher das \u00a0 war. An diesem Punkt kann ich nicht verstehen, was los ist. Bitte geben Sie mir eine Erklärung! 🙂

    – 0plus1

    7. April 2010 um 14:48 Uhr

  • Ich habe die Lösung gefunden, einfach den json_encode einer Variablen zuweisen und dann str_replace als gäbe es kein Morgen. Ich würde gerne noch die Spielerei über \xa0 verstehen, wenn Sie dürfen.

    – 0plus1

    7. April 2010 um 15:02 Uhr

  • Das kann ein Nullzeichen sein… Das maskierte Zeichen \u00a0 sagt “Unicode-Zeichen mit Hex-Wert 00a0.” Mein ursprünglicher Vorschlag hätte nur das a0-Segment entfernt. Versuchen Sie, \x00a0 durch eine leere Zeichenfolge zu ersetzen.

    – Annika Backström

    7. April 2010 um 17:02 Uhr

Dieser funktioniert auch, habe ich irgendwo gefunden

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

Kleiner Punkt: \u00a0 ist eigentlich ein geschütztes Leerzeichen, vgl http://www.fileformat.info/info/unicode/char/a0/index.htm

Es könnte also richtiger sein, es durch ” ” zu ersetzen

Benutzer-Avatar
Patrick

Das hat bei mir gewirkt:

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

Benutzer-Avatar
Peter Mortensen

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 maskieren – was so aussehen würde:

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

  • Ich bin auch auf dieses Problem gestoßen. Hier ist die Lösung, die für mich funktioniert hat. Ich habe eine Zeichenfolge mit dem bekannten \u00a0-Zeichen in meinen Editor kopiert, dann das “Leerzeichen” kopiert, das \u00a0 darstellt, und es in die str_replace-Funktion eingefügt. Am Ende sieht das so aus: str_replace(” “,””,$string). Das Leerzeichen im ersten Parameter ist der Nicht-Standard \u00a0. Führen Sie es jetzt durch json_encode.

    – Nick Johnson

    20. Februar 2012 um 16:36 Uhr

1073120cookie-checkIch habe eine Zeichenfolge mit „\u00a0“ und muss sie durch „“ ersetzen. str_replace schlägt fehl

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy