2009-03-16 21 views
5

Estoy usando CURL para importar código. Sin embargo, en francés, todos los personajes salen graciosos. Por ejemplo: Bonjour ...Problema de codificación de caracteres de importación CURL

No tengo acceso para cambiar nada en el código importado. ¿Hay algo que pueda hacer a mi lado para arreglar esto?

Gracias

+0

"Su situación no está clara ¿De dónde proviene en PHP es el contenido que está descargando el código PHP Lo ¿Estás usando para ver el texto después? -de la respuesta de Jon Skeet debajo de –

+0

Tu situación no está clara. ¿Dónde entra PHP? ¿El contenido está descargando código PHP? ¿Qué estás usando para ver el texto después? Es casi seguro que solo se trata de manejar los datos descargados en la codificación adecuada. Sin embargo, necesitará saber qué codificación es (busque en los encabezados HTTP una posible sugerencia, aunque puede que no se haya configurado correctamente) y cómo usar * la codificación correcta. No podemos ayudarlo en este último punto hasta que sepamos qué está haciendo con los datos después de obtenerlos. –

Respuesta

14

como Jon Skeet señalaron que es difícil de entender su situación, sin embargo, si usted tiene acceso sólo al texto final, puede tratar de utilizar iconv para cambiar la codificación de texto.

I.e.

$text = iconv("Windows-1252","UTF-8",$text); 

que he tenido hace tiempo problema similar (con lengua italiana y caracteres especiales) y yo he resuelto de esta manera.

Pruebe una combinación diferente (UTF-8, ISO-8859-1, Windows-1252).

+0

Documentación para el icono de PHPv: http://php.net/manual/en/book.iconv.php –

3

PHP parece utilizar UTF-8 de forma predeterminada, por lo que he encontrado las siguientes obras

$ texto = iconv ("UTF-8", "Windows-1252", $ texto);

2

Actualmente estoy sufriendo un problema similar, estoy tratando de escribir un simple html <title> importador cia cURL. Así que voy a dar una idea de lo que he hecho hasta ahora:

  1. recuperar el HTML a través de CURL
  2. Comprobar si hay cualquier indicio de codificación en las cabeceras de respuesta a través de curl_getinfo() y conectan a ella a través de expresiones regulares
  3. analizar el HTML con el fin de ver el tipo de contenido meta y la etiqueta <title> (sí, i know the consequences)
  4. comparar ambos de tipo de contenido, encabezado y meta y elegir la meta si es diferente, porque sabemos que a nadie le importa su configuración httpd y hay una gran cantidad de soluciones suciedad con que
  5. iconv() la cadena
  6. Whish cotidiana que cuando alguien no sigue las normas $DEITY lo castiga/ella hasta el final de los días, porque me ahorraría el análisis meta
3

Se podría reemplazar su

$data = curl_exec($ch); 

por

$data = utf8_decode(curl_exec($ch)); 

Tuve el mismo problema y funcionó bien para mí.

+0

IMPORTANTE: al convertir datos UTF8 que contienen el signo EURO, NO USE la función utf_decode. utf_decode convierte los datos en el juego de caracteres ISO-8859-1. Pero el juego de caracteres ISO-8859-1 no contiene el signo EURO, por lo tanto, el signo EURO se convertirá en un carácter de interrogación '?' Para convertir correctamente los datos UTF8 con signo EURO, debe usar: iconv ("UTF-8", "CP1252", $ data) – Thoman

6

Tuve un problema similar. Intenté recorrer todas las combinaciones de conjuntos de entrada y salida. ¡Nada ayudó! :(

Sin embargo, yo era capaz de acceder al código que realmente fue a buscar los datos y aquí es donde el culpable mintió. Los datos se fue a buscar a través de rizo. La adición de

curl_setopt($ch,CURLOPT_BINARYTRANSFER,true); 

arreglado.

Un práctico conjunto de código para probar todas las combinaciones posibles de una lista de juegos de caracteres:.??

$charsets = array( 
     "UTF-8", 
     "ASCII", 
     "Windows-1252", 
     "ISO-8859-15", 
     "ISO-8859-1", 
     "ISO-8859-6", 
     "CP1256" 
     ); 

foreach ($charsets as $ch1) { 
    foreach ($charsets as $ch2){ 
     echo "<h1>Combination $ch1 to $ch2 produces: </h1>".iconv($ch1, $ch2, $text_2_convert); 
    } 
} 
Cuestiones relacionadas