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:

  1. El " ß " en "Fußball" debería verse así en mi base de datos: "Ÿ". Si es un "Ÿ", se muestra correctamente.

  2. A veces, la " ß " en " Fußball" se ve así en mi base de datos: "ƒ". Entonces se muestra erróneamente, por supuesto.

  3. 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:

  1. ¿Cómo averiguar qué codificación utiliza el texto?
  2. ¿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