Ich lese viele Texte aus verschiedenen RSS-Feeds vor und füge sie in meine Datenbank ein.
Natürlich werden in den Feeds verschiedene Zeichencodierungen verwendet, z. B. UTF-8 und ISO 8859-1.
Leider gibt es manchmal Probleme mit der Kodierung der Texte. Beispiel:
Das "ß" in "Fußball" sollte in meiner Datenbank so aussehen: "Ÿ". Wenn es sich um ein "" handelt, wird es korrekt angezeigt.
Manchmal sieht das "ß" in "Fußball" in meiner Datenbank so aus: "ß". Dann wird es natürlich falsch angezeigt.
In anderen Fällen wird das "ß" als "ß" gespeichert - also ohne Änderung. Dann wird es auch falsch angezeigt.
Was kann ich tun, um die Fälle 2 und 3 zu vermeiden?
Wie kann ich alles gleich codieren, vorzugsweise UTF-8? Wann muss ich verwenden utf8_encode()
, wann muss ich verwenden utf8_decode()
(es ist klar, was der Effekt ist, aber wann muss ich die Funktionen verwenden?) Und wann darf ich nichts mit der Eingabe tun?
Wie mache ich alles gleich codiert? Vielleicht mit der Funktion mb_detect_encoding()
? Kann ich dafür eine Funktion schreiben? Meine Probleme sind also:
- Wie finde ich heraus, welche Codierung der Text verwendet?
- Wie konvertiere ich es in UTF-8 - unabhängig von der alten Codierung?
Würde eine solche Funktion funktionieren?
function correct_encoding($text) {
$current_encoding = mb_detect_encoding($text, 'auto');
$text = iconv($current_encoding, 'UTF-8', $text);
return $text;
}
Ich habe es getestet, aber es funktioniert nicht. Was stimmt damit nicht?