Detecta la codificación y haz que todo sea UTF-8
Estoy leyendo muchos textos de varios canales RSS e insertándolos en mi base de datos.
Por supuesto, hay varias codificaciones de caracteres diferentes utilizadas en los feeds, por ejemplo, UTF-8 e ISO-8859-1.
Desafortunadamente, a veces hay problemas con la codificación 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, la " ß " en " Fußball" se ve así en mi base de datos: "ƒ". Entonces se muestra erróneamente, por supuesto.
En otros casos, el " ß "se guarda como un" ß " - so 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 cuando debo hacer nada con el la entrada?
¿Puedes ayudarme y decirme cómo hacer que todo tenga la misma codificación? Tal vez con la función mb_detect_encoding()
? Puedo escribir una función para esto? Así que mis problemas son:
- ¿Cómo averiguar qué codificación utiliza el texto?
- ¿Cómo convertirlo a UTF-8-sea cual sea la codificación antigua?
¿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?
Warning: Undefined property: agent_blog_content::$date_asked in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 32
Warning: Undefined property: agent_blog_content::$count_answers in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 52