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"
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"
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')
.
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:
Verwenden Sie utf8_decode()
, um die Daten, die Sie abrufen, in die gewünschte Ausgabe zu transformieren.
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.
`` ``` ```` ````` ``````
//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.
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))
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
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.