Estou lendo muitos textos de vários feeds RSS e inserindo-os no meu banco de dados.
Obviamente, existem várias codificações de caracteres diferentes usadas nos feeds, por exemplo, UTF-8 e ISO 8859-1.
Infelizmente, às vezes há problemas com a codificação dos textos. Exemplo:
O "ß" em "Fußball" deve ficar assim no meu banco de dados: "Â". Se for um "Â", é exibido corretamente.
Às vezes, o "ß" em "Fußball" fica assim no meu banco de dados: "ÃÂ". Então é exibido incorretamente, é claro.
Em outros casos, o "ß" é salvo como um "ß" - portanto, sem nenhuma alteração. Então também é exibido incorretamente.
O que posso fazer para evitar os casos 2 e 3?
Como posso fazer tudo da mesma codificação, de preferência UTF-8? Quando devo usar utf8_encode()
, quando devo usar utf8_decode()
(está claro qual é o efeito, mas quando devo usar as funções?) E quando devo fazer nada com a entrada?
Como faço para tornar tudo a mesma codificação? Talvez com a função mb_detect_encoding()
? Posso escrever uma função para isso? Então, meus problemas são:
- Como descubro qual codificação o texto usa?
- Como o converto para UTF-8 - qualquer que seja a codificação antiga?
Uma função como esta funcionaria?
function correct_encoding($text) {
$current_encoding = mb_detect_encoding($text, 'auto');
$text = iconv($current_encoding, 'UTF-8', $text);
return $text;
}
Eu testei, mas não funciona. O que há de errado com isso?