it-swarm.com.de

PHP UTF-8-Zeichensatz für Locken

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);
22
Bora Alp Arat

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

31
julio

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

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

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, "");
1
MAChitgarha

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.

0
michalzuber