PHP卷曲UTF-8字符集(PHP Curl UTF-8 Charset)

2019-06-24 19:42发布

我有一个PHP脚本,调用另一个网页,并写入页的所有HTML,万事如意但确定有一个字符集问题。 我的PHP文件的编码是UTF-8和所有其他PHP文件工作正常(这意味着有与服务器没问题)。 什么是代码缺少的东西,所有的西班牙语字母看起来很怪异。 PS。 当我写这些奇怪的字符原始版本到PHP中,他们看起来都准确。

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);

Answer 1:

很简单:当你使用它卷曲编码字符串utf-8你只需要来解码..

Description

string utf8_decode ( string $data )

此功能的数据进行解码,假定为UTF-8编码,以便ISO-8859-1



Answer 2:

您可以使用头

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

和解码后的字符串

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

这对我的工作



Answer 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;
}


Answer 4:

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


Answer 5:

我曾经使用过的最好的方法是使用urlencode() 请记住,不要将其用于整个URL。 用它来了你所需要的零件,如波斯字符。 不过,也有更好的方法,如果你要编码的字符范围较为有限。 其中一种方法是使用CURLOPT_ENCODING ,通过把它传递给curl_setopt()

curl_setopt($ch, CURLOPT_ENCODING, "");


Answer 6:

我是通过获取一个卷曲的窗户-1252编码文件和mb_detect_encoding(curl_exec($ch)); 返回UTF-8。 试图utf8_encode(curl_exec($ch)); 和人物是正确的。



文章来源: PHP Curl UTF-8 Charset