PHP Curl UTF-8 Charset

У меня есть 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); 

Простой: когда вы используете curl, он кодирует строку в utf-8 вам просто нужно их декодировать.

 Description string utf8_decode ( string $data ) 

Эта функция декодирует данные, предполагаемые UTF-8 , в ISO-8859-1 .

Вы можете использовать заголовок

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

и после строки декодирования

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

Это сработало для меня

 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; } 
 $output = curl_exec($ch); $result = iconv("Windows-1251", "UTF-8", $result); 

Я mb_detect_encoding(curl_exec($ch)); файл с кодировкой windows-1252 через cURL и mb_detect_encoding(curl_exec($ch)); вернулся UTF-8. Пробовал utf8_encode(curl_exec($ch)); и символы были правильными.

Лучшим способом, который я пробовал раньше, является использование urlencode() . Имейте в виду, не используйте его для всего URL-адреса. Используйте его только для частей, которые вам нужны, например, для персидских символов. Однако есть лучшие способы, если диапазон символов, которые вы хотите кодировать, более ограничен. Один из этих способов – использовать CURLOPT_ENCODING , перейдя к другому curl_setopt() :

 curl_setopt($ch, CURLOPT_ENCODING, "");