2015-04-23 4 views
1

Je le code suivant:Get UTF8 DOM du fichier UTF8

<?php 

header('Content-Type: text/html; charset=utf-8'); 

function getSource($url) 
{ 
    if (!function_exists('curl_init')) 
    { 
     die('CURL is not installed!'); 
    } 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_ENCODING, "UTF-8"); 
    $output = curl_exec($ch); 
    curl_close($ch); 

    return $output; 
} 

$source = getSource('http://www.website.com/'); 
var_dump($source); die(); 

Et le fichier lui-même est en UTF-8. La chose est les caractères UTF-8 de la sortie ne sont pas affichés correctement. Au lieu de cela, ils sont affichés sous la forme de points d'interrogation ou d'une autre corbeille.

Et la seule chose à résoudre ce que j'ai découvert est d'encoder le fichier comme ISO-8859-1. Mais je ne veux pas ça. Quel est le problème ici?

Répondre

1

La valeur que vous passez à CURLOPT_ENCODING est (a) invalide et (b) de sens, en ce qu'elle ne force pas Curl à traduire le contenu, il va chercher dans l'encodage que vous voulez. Si le site distant renvoie ISO-8859-1, vous devez le traduire vous-même en UTF-8.

CURLOPT_ENCODING est utilisé pour accepter l'en-tête Accept-Encoding: lors de l'extraction d'une page. Les valeurs valides sont "identity", "deflate" et "gzip". Comme vous pouvez le voir, cela n'a aucune signification pour l'encodage des jeux de caractères.

+1

Probablement utile de mentionner quelques façons de faire la conversion - 'mb_convert_encoding' et' iconv' viennent à l'esprit. – IMSoP