Ich habe ein PHP-Skript, das eine andere Webseite aufruft und alle HTML-Seiten der Seite schreibt, und alles geht in Ordnung. Allerdings gibt es ein Zeichensatzproblem. Meine PHP-Dateikodierung ist utf-8 und alle anderen PHP-Dateien funktionieren einwandfrei (das heißt, es gibt kein Problem mit dem Server). Was fehlt in diesem Code und alle spanischen Buchstaben sehen komisch aus. PS. Wenn ich die Originalversionen dieser seltsamen Charaktere in PHP geschrieben habe, sehen sie alle genau aus.
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);
Einfach: Wenn Sie curl verwenden, wird der String in utf-8
codiert.
Description
string utf8_decode ( string $data )
Diese Funktion decodiert Daten, die als UTF-8
-codiert gelten, in ISO-8859-1
.
Sie können Header verwenden
header('Content-type: text/html; charset=UTF-8');
und nach Decodierungsstring
$page = utf8_decode(curl_exec($ch));
Es hat für mich gearbeitet
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", $output);
Der beste Weg, den ich zuvor ausprobiert habe, ist die Verwendung von urlencode()
. Denken Sie daran, verwenden Sie es nicht für die gesamte URL. Verwenden Sie es nur für die Teile, die Sie benötigen, z. für persische Zeichen. Es gibt jedoch bessere Möglichkeiten, wenn der zu codierende Zeichenbereich stärker eingeschränkt ist. Eine dieser Möglichkeiten ist, CURLOPT_ENCODING
zu verwenden, indem Sie es an curl_setopt()
übergeben:
curl_setopt($ch, CURLOPT_ENCODING, "");
Ich holte eine mit Windows-1252 codierte Datei über cURL und mb_detect_encoding(curl_exec($ch));
gab UTF-8 zurück. Versuchte utf8_encode(curl_exec($ch));
und die Charaktere waren korrekt.