8 Stimmen

Php str_replace funktioniert nicht mit Sonderzeichen

Warum funktioniert das nicht wie erwartet:

 echo str_replace("é","é","Fédération Camerounaise de Football");

Ergebnis:

"Fédération Camerounaise de Football"

Ich erwarte:

"Fédération Camerounaise de Football"

11voto

Havenard Punkte 25009

Sie machen es falsch. Dieser String ist nicht falsch und muss ersetzt werden, er ist einfach nur mit UTF-8 codiert.

Alles, was Sie tun müssen, ist utf8_decode('Fédération Camerounaise de Football').

Aktualisierung:

Sie sehen Fédération Camerounaise de Football als Ausgabe, weil Sie Ihre Daten doppelt in UTF-8 übergeben.

Betrachten Sie:

Datei 1.php im UTF-8-Format gespeichert:


Ausgabe:

> > Fédération Camerounaise de Football

Wenn Sie dem Browser sagen, dass Sie UTF-8 verwenden, sollte er den Inhalt direkt anzeigen:

**Datei 2.php im UTF-8-Format gespeichert:**

Ausgabe:

Fédération Camerounaise de Football

Perfekt.

Sie machen jedoch die Dinge noch schlimmer. Sie haben einen UTF-8-codierten String und codieren ihn erneut, indem Sie ihn in eine UTF-8-codierte Datei schreiben.

Datei 3.php im UTF-8-Format gespeichert:


Ausgabe:

> > Fédération Camerounaise de Football

Was für ein Durcheinander. Lassen Sie uns sehen, ob wir das mit `str_replace` beheben können:

**Datei 4.php im UTF-8-Format gespeichert:**

Ausgabe:

Fédération Camerounaise de Football

Wie Sie sehen können, haben wir es "repariert". Irgendwie. Das ist, was Sie tun. Sie wandeln é in é um, obwohl Sie das nicht sehen, weil Ihr Editor Ihnen die echten Symbole hinter der Codierung nicht zeigt, aber der Browser tut es.

Lassen Sie es uns noch einmal mit ASCII probieren:

Datei 5.php im ASCII-Format gespeichert:

``

Ausgabe:

Fédération Camerounaise de Football

Magie! Der Browser hat jetzt alles richtig. Aber wo ist die echte Lösung? Nun. Wenn Sie einen String in Ihrer PHP-Datei fest codiert haben, dann sollten Sie einfach Fédération Camerounaise de Football schreiben anstatt es falsch zu platzieren. Aber wenn Sie es aus einer anderen Datei oder einer Datenbank abrufen, sollten Sie einen der beiden Wege gehen:

  1. Verwenden Sie utf8_decode(), um die Daten, die Sie abrufen, in die gewünschte Ausgabe zu transformieren.

  2. Transformieren Sie nichts und verwenden Sie header('Content-Type: text/html; charset=utf-8');, um dem Browser mitzuteilen, dass Sie den Inhalt im UTF-8-Format drucken, damit er die Dinge korrekt anzeigen kann.

`` ``` ```` ````` ``````

2voto

ins0 Punkte 3900

//Bearbeiten nach Kommentar

Fédération Camerounaise de Football ist ein mit UTF-8 codierter String, daher weiß ich nicht, was der Eingabe nicht mit utf-8 codiert in Ihrem Dokument ist, aber Sie haben zwei Optionen.

  1. Ihre Eingabe, die an str_replace übergeben wird, ist utf-8, aber die Zeichen, die Sie in den Funktionen zum Ersetzen verwendet haben, sind ANSII oder etwas anderes => funktioniert nicht - das bedeutet, Ihr Dokument ist nicht utf-8 - deshalb funktioniert uft8_decod str_replace(ANSII, ANSII, CONVERT_TO_ANSII(UTF-8))

  2. Ihre Eingabe ist nicht utf-8 und Ihr Dokument schon - das würde also funktionieren str_replace(UTF-8, UTF-8, CONVERT_TO_UTF-8(ANSII))


str_replace funktioniert gut mit Multibyte-Zeichen - Ihr Problem ist nicht die Funktion, sondern dass Sie versuchen, verschiedene Codierungsarten zu ersetzen. Anstatt eine alternative Funktion zu verwenden, schlage ich vor, Sie beheben die Eingabe, die an str_replace übergeben wird, auf utf-8 und stellen sicher, dass Ihr Dokument auch mit utf-8 codiert ist.

Wenn Ihre Quelle nur nicht utf-8 Codierung unterstützt, verwenden Sie utf8_encode, um Ihre Eingabe in utf-8 umzuwandeln

http://php.net/manual/de/function.utf8-encode.php

-3voto

Überprüfen Sie den folgenden Code:

$chain="Fédération Camerounaise de Football";
$pattern = array("'é'");
$replace = array('é'); 
$chain = preg_replace($pattern, $replace, $chain);
echo $chain;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X