Impossibile visualizzare la pagina Web scaricata con la codifica corretta tramite PHP
-
11-07-2019 - |
Domanda
Devo ottenere il contenuto di una pagina persiana e mostrare una parte di quella pagina ad alcuni utenti. Il problema è che dopo aver filtrato il contenuto della pagina non riesco a mostrare il contenuto con la codifica corretta. La pagina web si trova su sena.ir ed ecco la schermata della parte della pagina Web originale che voglio mostrare:
alt text http://img502.imageshack.us/img502/983/original .gif
Ed ecco cosa ho ottenuto:
alt text http://www.freeimagehosting.net/uploads/812cebe6b3.gif
Ecco la funzione che utilizzo per ottenere il contenuto della pagina:
function getPage($url, $referer="", $timeout="", $header=""){
if(!isset($timeout))
$timeout=30;
$curl = curl_init();
if(strstr($referer,"://")){
curl_setopt ($curl, CURLOPT_REFERER, $referer);
}
$headers [] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg';
$headers [] = 'Connection: Keep-Alive';
$headers [] = 'Content-type: application/x-www-form-urlencoded;charset=utf-8 '; // I Tried iso-..... as well but no chance
$user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)';
$compression = "gzip";
curl_setopt ($curl, CURLOPT_HTTPHEADER, $headers );
curl_setopt ($curl, CURLOPT_HEADER, 0 );
curl_setopt ($curl, CURLOPT_USERAGENT, $user_agent );
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ($curl, CURLOPT_FOLLOWLOCATION, 1 );
curl_setopt ($curl, CURLOPT_POST, 0 );
curl_setopt ($curl, CURLOPT_ENCODING, $compression );
curl_setopt ($curl, CURLOPT_TIMEOUT, 300 );
curl_setopt ($curl, CURLOPT_SSL_VERIFYHOST, 0 );
curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0 );
curl_setopt ($curl, CURLOPT_URL, $url);
$html = curl_exec ($curl);
curl_close ($curl);
return $html;
}
$content = getPage("http://sena.ir/");
$p1 = strpos($content,'<TABLE cellSpacing="3" cellPadding="3" width="100%" border="0">');
$p2 = strpos($content,"</TABLE>",$p1);
$content = substr($content, $p1, $p2-$p1);
echo $content;
Soluzione
I dati non erano il problema. L'output era il problema. Poiché la funzione del tipo di proxy rimuove le intestazioni del codice HTML e la declerazione della codifica, è necessario aggiungere queste righe prima di generare i dati filtrati:
<html lang="fa">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">