Estoy leyendo muchos textos de varios canales RSS y los inserto en mi base de datos.
Por supuesto, hay varias codificaciones de caracteres diferentes utilizadas en las fuentes, por ejemplo, UTF-8 e ISO 8859-1.
Desafortunadamente, a veces hay problemas con las codificaciones de los textos. Ejemplo:
El "ß" en "Fußball" debería verse así en mi base de datos: "Ÿ". Si es un "Ÿ", se muestra correctamente.
A veces, el "ß" en "Fußball" se ve así en mi base de datos: "ß". Entonces se muestra incorrectamente, por supuesto.
En otros casos, el "ß" se guarda como un "ß", es decir, sin ningún cambio. Entonces también se muestra incorrectamente.
¿Qué puedo hacer para evitar los casos 2 y 3?
¿Cómo puedo hacer que todo tenga la misma codificación, preferiblemente UTF-8? ¿Cuándo debo usar utf8_encode()
, cuándo debo usar utf8_decode()
(está claro cuál es el efecto pero cuándo debo usar las funciones?) Y cuándo no debo hacer nada con la entrada?
¿Cómo hago que todo tenga la misma codificación? Quizás con la función mb_detect_encoding()
? ¿Puedo escribir una función para esto? Entonces mis problemas son:
- ¿Cómo puedo saber qué codificación utiliza el texto?
- ¿Cómo lo convierto a UTF-8, sea cual sea la codificación anterior?
¿Funcionaría una función como esta?
function correct_encoding($text) {
$current_encoding = mb_detect_encoding($text, 'auto');
$text = iconv($current_encoding, 'UTF-8', $text);
return $text;
}
Lo he probado, pero no funciona. ¿Qué tiene de malo?