Sto leggendo molti testi da vari feed RSS e li inserisco nel mio database.
Ovviamente, ci sono diverse codifiche di caratteri utilizzate nei feed, ad esempio UTF-8 e ISO 8859-1.
Sfortunatamente, a volte ci sono problemi con la codifica dei testi. Esempio:
"Ss" in "Fußball" dovrebbe apparire così nel mio database: "Ÿ". Se è un "Ÿ", viene visualizzato correttamente.
A volte, il "ß" in "Fußball" appare così nel mio database: "ß". Quindi viene visualizzato in modo errato, ovviamente.
In altri casi, "ß" viene salvato come "ß", quindi senza alcuna modifica. Quindi viene visualizzato anche in modo errato.
Cosa posso fare per evitare i casi 2 e 3?
Come posso rendere tutto uguale alla stessa codifica, preferibilmente UTF-8? Quando devo usare utf8_encode()
, quando devo usare utf8_decode()
(è chiaro quale sia l'effetto ma quando devo usare le funzioni?) E quando non devo fare nulla con l'input?
Come faccio a rendere tutto uguale alla stessa codifica? Forse con la funzione mb_detect_encoding()
? Posso scrivere una funzione per questo? Quindi i miei problemi sono:
- Come faccio a sapere quale codifica utilizza il testo?
- Come posso convertirlo in UTF-8, qualunque sia la vecchia codifica?
Una funzione come questa funzionerebbe?
function correct_encoding($text) {
$current_encoding = mb_detect_encoding($text, 'auto');
$text = iconv($current_encoding, 'UTF-8', $text);
return $text;
}
L'ho provato, ma non funziona. Che cosa c'è che non va?