PHP: UTF 8 caracteres de codificación

Estoy raspando una lista de fuentes RSS mediante el uso de cURL, y entonces estoy lectura y análisis de los datos de RSS con SimpleXML. Los datos ordenados, se introducen en una base de datos mySQL.

Sin embargo, como aviso en http://dansays.co.uk/research/MNA/rss.php estoy teniendo varios problemas con los caracteres no se muestren correctamente.

Ejemplos:

âGuitar Hero: Van Halenâ Trailer And Tracklist Available

NV 10/10/09 – Salt Lake City, UT 10/11/09 – Denver, CO 10/13/09 –

He intentado usar htmlentities y htmlspecialchars en los datos antes de insertarlos en la base de datos, pero no parece ayudar a resolver el problema.

¿Cómo podría resolver este problema que estoy teniendo?

Gracias por los consejos.

Actualizado

He probado lo de Greg propuso, y el problema sigue aquí…

Aquí está el código que he usado para hacer los NOMBRES de SET en el PDO:

$dbh = new PDO($dbstring, $username, $password); 

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$dbh->query('SET NAMES "utf8"');

Hice un poco de eco de ing con la simplexml datos antes de que se ordenan y se inserta en la base de datos, y ahora creo que es algo para hacer con el rizo…

Aquí es lo que tengo para cURL:

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_ENCODING, 'UTF-8');

$data = curl_exec($ch);

curl_close($ch);

$doc = new SimpleXmlElement($data, LIBXML_NOCDATA);

Problema Resuelto

Me tenía que fijar el contenido del conjunto de caracteres en el RSS/página HTML para «UTF-8» para resolver este problema. Supongo que esto no es una verdadera solución como el char problemas están ahí en los datos en bruto. Mirando hacia adelante a soporte adecuado para que en PHP6!

InformationsquelleAutor Daniel Clark | 2009-08-11

4 Kommentare

  1. 2

    Como todos los de depuración, se comienza por aislar el problema:

    Estoy raspando una lista de fuentes RSS mediante el uso de cURL, – mira en el xml del feed RSS que te está dando el problema (hay más de una fuente, por lo que es posible que algunos alimentos para estar bien y para el de los alimentos que están mal estar equivocado en diferentes formas)

    y, a continuación, estoy lectura y análisis de los datos de RSS con SimpleXML. – imprimir el campo que SimpleXML de lectura – es aceptar o no un problema de aparecer?

    Los datos ordenados, se introducen en una base de datos mySQL. – imprimir hex(campo), longitud(campo), y char_length(campo) para la pieza de datos que está dando el problema.

    EDITAR

    Tomar el alimento http://hangout.altsounds.com/external.php?type=RSS2 , ponerlo en el validador http://validator.w3.org/feed/ . Están declarando su tipo de contenido como iso-8859-1, pero algunos de los de contenido real, tales como las comillas, es algo como cp1252 – por ejemplo, se está usando el byte 0x93 para representar a la izquierda de la cita – http://www.fileformat.info/info/unicode/char/201C/charset_support.htm .

    Lo molesto de esto es que este no se muestra en algunas herramientas de Firefox parece adivinar lo que está pasando y mostrar las citas correctamente, y más al punto, SimpleXML convierte el 0x93 en utf8, por lo que sale como 0xc293, lo que agrava el problema.

    EDITAR 2

    Una solución para conseguir que alimentan a leer un poco más correctamente es reemplazar «ISO-8859-1» por «Windows-1252» antes de pasar a XML Simple. No funciona al 100% porque resulta que en algunas partes de la alimentación están en UTF8.

    El enfoque general, suponiendo que usted no puede conseguir a todo el mundo a corregir sus fuentes, es aislar lo soluciones provisionales que se requieran para la interfaz con el sistema externo de que el emisor de los datos con formato incorrecto, y pasar en puro claro utf8 para el centro de tu sistema. Guardar una copia actualizada de la materia prima de alimentación externa para que pueda recordar en el futuro ¿por qué la solución era necesario, separar y comentar las líneas de código que implementar la solución, así que es fácil llegar y cambiar si y cuando la organización externa corrige su alimentación (o se rompe en forma distinta), y comprobar de nuevo de tiempo en tiempo. Por desgracia, en lugar de la programación para una especificación está la programación para el estado actual de un error, así que no hay permanente, solución limpia – lo mejor que puedes hacer es aislar, en el documento, y el monitor.

    • Estoy hasta el punto de que la codificación real problema es que vienen directamente de los datos xml a sí mismo como usted puede ver aquí en algunos de los títulos recuperados… dansays.co.uk/research/MNA/fetch.raw.php
    • Gracias por tus consejos impresionante! 🙂
  2. 3

    Su página se desempeñó como UTF-8, lo que me gustaría punto de mi dedo en la base de datos.

    Asegúrese de que la conexión está en UTF-8 antes de cualquier Selecciona o se INSERTA en MySQL:

    SET NAMES "utf8"
    • La OP es la lectura de un feed rss usinc cURL, nada que ver con una base de datos
    • Por favor, vuelve a leer la pregunta: «Los datos ordenados, se introducen en una base de datos mySQL.»
    • ‘utf8_general_ci» ya ha sido establecido en las tablas en myPHPAdmin.
    • La configuración de lo que codifica el uso de tablas es una cuestión independiente de la codificación que usa para INTERACTUAR con las tablas. Usted podría muy fácilmente pasar de MySQL latin1 de datos, lo que podría convertir a UTF-8 antes de almacenar. El SET NAMES utf8 comando Greg recomienda, dice, «tengo la intención de hacer todas mis comunicaciones con MySQL usando UTF-8». O, de otra manera: «Los datos que voy a estar dando, MySQL, es codificado como UTF-8 ya.»
    • Como @VoteyDisciple dice: utf8_general_ci es la intercalación – afecta la forma en que algunas de las funciones de cadena & operadores trabajo, pero no el conjunto de caracteres de la conexión
    • Greg es correcta
    • Solución rápida y sencilla a un problema que estaba tratando de superar ayer por un par de horas (no tenía conexión a internet… no hay acceso a una… de codificación como un hombre de las cavernas ;)). GRACIAS GREG!

  3. 3

    Sólo una nota rápida acerca de CURLOPT_ENCODING : es el Accept-Encoding de cabecera, que no es el mismo en todos, como la codificación de caracteres. Apoyado aceptar codificaciones son «identidad», «desinflar», y «gzip».

  4. 1

    Que puede tener que ver con el XML prólogo, que tiene este aspecto para que la alimentación en particular vinculado a:

    <?xml version="1.0" encoding="ISO-8859-1" ?>

    Que yo sepa libxml, en el que SimpleXML se basa, busca este tipo de cosas. No estoy seguro acerca de los archivos XML, pero estoy seguro de que con HTML cadenas busca META elementos que especificar el juego de caracteres.

    Tratar de desbloquear el XML prólogo (he resuelto un problema similar una vez por separar el HTML META etiquetas) y no te olvides de utf8_encode() los datos antes de dársela a SimpleXMLElement.

    • Tu ayuda seguro que hizo que me señale en la dirección correcta, pero todavía no se ha aclarado todas mis cuestiones todavía. Gracias de todos modos!

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea