2012-05-25 9 views
18

私は別のWebページを呼び出し、ページのすべてのHTMLを書き込むPHPスクリプトを持っていますが、すべてが問題になりますが、文字セットの問題があります。私のPHPファイルのエンコーディングはutf-8で、他のすべてのphpファイルは正常に動作します(つまり、サーバに問題はありません)。そのコードに欠けているものは何ですか?また、すべてのスペイン語の文字が奇妙に見えます。 PS。これらの奇妙な文字の元のバージョンをPHPに書いたとき、それらはすべて正確に見えます。PHP Curl UTF-8 Charset

header("Content-Type: text/html; charset=utf-8"); 
function file_get_contents_curl($url) 
{ 
    $ch=curl_init(); 
    curl_setopt($ch,CURLOPT_HEADER,0); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); 
    $data=curl_exec($ch); 
    curl_close($ch); 
    return $data; 
} 
$html=file_get_contents_curl($_GET["u"]); 
$doc=new DOMDocument(); 
@$doc->loadHTML($html); 
+11

はcURLの問題ではありません「すべてのスペイン語の文字が奇妙に見えます」。 –

答えて

28

シンプル: あなたはカールを使用する場合、それはあなたがちょうどそれらをデコードする必要がutf-8に文字列をエンコードする。..

Description 

string utf8_decode (string $data) 

この関数は、データをデコードするには、ISO-8859-1に、UTF-8をエンコードすることを想定しました。

3
function page_title($val){ 
    include(dirname(__FILE__).'/simple_html_dom.php'); 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL,$val); 
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0'); 
    curl_setopt($ch, CURLOPT_ENCODING , "gzip"); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    $return = curl_exec($ch); 
    $encot = false; 
    $charset = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); 

    curl_close($ch); 
    $html = str_get_html('"'.$return.'"'); 

    if(strpos($charset,'charset=') !== false) { 
     $c = str_replace("text/html; charset=","",$charset); 
     $encot = true; 
    } 
    else { 
     $lookat=$html->find('meta[http-equiv=Content-Type]',0); 
     $chrst = $lookat->content; 
     preg_match('/charset=(.+)/', $chrst, $found); 
     $p = trim($found[1]); 
     if(!empty($p) && $p != "") 
     { 
      $c = $p; 
      $encot = true; 
     } 
    } 
    $title = $html->find('title')[0]->innertext; 
    if($encot == true && $c != 'utf-8' && $c != 'UTF-8') $title = mb_convert_encoding($title,'UTF-8',$c); 

    return $title; 
} 
7

あなたは

header('Content-type: text/html; charset=UTF-8'); 

と私はcURLのを介して窓-1252エンコードされたファイルを取得してそれは私のため

0

を働いています

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

デコード文字列の後にヘッダを使用することができますmb_detect_encoding(curl_exec($ch));はUTF-8を返しました。試しましたutf8_encode(curl_exec($ch));と文字が正しいです。

0

私が試した最善の方法は、urlencode()を使用することです。念頭に置いて、URL全体に使用しないでください。必要な部分だけに使用します(例:ペルシャ文字のために。ただし、エンコードする文字の範囲が限定されている場合は、より良い方法があります。これらの方法の一つは、他のcurl_setopt()に渡すことによって、CURLOPT_ENCODINGを使用することです:

curl_setopt($ch, CURLOPT_ENCODING, ""); 
1
$output = curl_exec($ch); 
$result = iconv("Windows-1251", "UTF-8", $output);