Ho provato a porre il quesito anche in altri forum ma non trovo una risposta, ho un problema di codifica generando un file XML, provo a descrivere la situazione, se servono altre informazioni sono a disposizione.
Sto recuperando le informazioni relative a titolo e descrizione di un url tramite php, la chiamata al file php che recupera queste informazioni viene fatta tramite una chiamata ajax ed il file ritorna queste informazioni in formato xml.
Di seguito di vi posto il codice in completo in questione perchè il mio problema è molto specifico, ovvero ho dei problemi con il charset che non mi permettono di ricevere correttamente le informazioni Titolo e Descrizione relative ad alcuni specifici Url.
E' un post un po lungo da seguire ma credo possa essere interessante e magari parti di questo codice possono essere riutilizzate da chi vuole trovare il Title e la Description di url vari.
Praticamente è la stessa operazione che viene fatta da facebook quando nel campo input text della nostra bacheca inseriamo un url e lui trova l'informazione title e description.
Inoltre prima di postare il codice vi linko la pagina dove è presente il codice che sto postando qui in modo che possiate provare il tutto per capire meglio la cosa.
Il test lo trovate qui: http(//www(.)mmospot(.)it/urlinfoxml/ è una pagina solo di test che ho creato per l'occassione perchè non sto trovando una soluzione. Esaminando il codice di questa pagina potete esaminare la parte javascript e la chiamata ajax mentre per la parte in php è postata qualche riga più avanti.
Vi elenco alcuni url che potete provare che hanno il problema del charset ed altri che funzionano correttamenteper provare gli url fate copia e incolla nel campo di testo che trovate alla pagina di test che ho appena linkato)
Problema con la è accentata:
http(//www(.)youtube(.)com/watch?v=GgUDeQFDuF4&feature=relmfu
Questo addirittura rende il documento XML non valido
http(//www(.)youtube(.)com/watch?v=qBRwmT_LmK0
Corretto:
http(//www(.)youtube(.)com/watch?v=R_5TjL3RQHY&feature=relmfu
Corretto:
http(//www(.)youtube(.)com/watch?v=_xOWcdFOQyE&feature=related
per provare potete fare copia e incolla degli url, non scriveteli perchè il campo reagisce all'evento "onkeyup" e vi rallenterebbe.
Questo è il file get_url_info.php protagonista della chiamata ajax che restituisce un file XML
<?php
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;
}
$url=addslashes($_POST['url']);
//trovo le informazioni relative all'url
$html = file_get_contents_curl($url);
//parsing begins here:
$doc = new DOMDocument();
@$doc->loadHTML($html);
$nodes = $doc->getElementsByTagName('title');
//get and display what you need:
$title = $nodes->item(0)->nodeValue;
$metas = $doc->getElementsByTagName('meta');
for ($i = 0; $i < $metas->length; $i++)
{
$meta = $metas->item($i);
if($meta->getAttribute('name') == 'description')
$description = $meta->getAttribute('content');
if($meta->getAttribute('name') == 'keywords')
$keywords = $meta->getAttribute('content');
}
if(strlen($title)==0){$title="Nessun titolo";}
if(strlen($description)==0){$description="Nessuna descrizione";}
header('Content-type: text/xml');
header('Pragma: public');
header('Cache-control: private');
header('Expires: -1');
$outstr.="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<informazioniurl>\n";
//genero il contenuto del file xml
$outstr.="\t<url>\n";
$outstr.="\t\t<title>".$title."</title>\n";
$outstr.="\t\t<description>".$description."</description>\n";
$outstr.="\t</url>\n";
$outstr.="</informazioniurl>\n";
echo $outstr;
?>
Sto recuperando le informazioni relative a titolo e descrizione di un url tramite php, la chiamata al file php che recupera queste informazioni viene fatta tramite una chiamata ajax ed il file ritorna queste informazioni in formato xml.
Di seguito di vi posto il codice in completo in questione perchè il mio problema è molto specifico, ovvero ho dei problemi con il charset che non mi permettono di ricevere correttamente le informazioni Titolo e Descrizione relative ad alcuni specifici Url.
E' un post un po lungo da seguire ma credo possa essere interessante e magari parti di questo codice possono essere riutilizzate da chi vuole trovare il Title e la Description di url vari.
Praticamente è la stessa operazione che viene fatta da facebook quando nel campo input text della nostra bacheca inseriamo un url e lui trova l'informazione title e description.
Inoltre prima di postare il codice vi linko la pagina dove è presente il codice che sto postando qui in modo che possiate provare il tutto per capire meglio la cosa.
Il test lo trovate qui: http(//www(.)mmospot(.)it/urlinfoxml/ è una pagina solo di test che ho creato per l'occassione perchè non sto trovando una soluzione. Esaminando il codice di questa pagina potete esaminare la parte javascript e la chiamata ajax mentre per la parte in php è postata qualche riga più avanti.
Vi elenco alcuni url che potete provare che hanno il problema del charset ed altri che funzionano correttamenteper provare gli url fate copia e incolla nel campo di testo che trovate alla pagina di test che ho appena linkato)
Problema con la è accentata:
http(//www(.)youtube(.)com/watch?v=GgUDeQFDuF4&feature=relmfu
Questo addirittura rende il documento XML non valido
http(//www(.)youtube(.)com/watch?v=qBRwmT_LmK0
Corretto:
http(//www(.)youtube(.)com/watch?v=R_5TjL3RQHY&feature=relmfu
Corretto:
http(//www(.)youtube(.)com/watch?v=_xOWcdFOQyE&feature=related
per provare potete fare copia e incolla degli url, non scriveteli perchè il campo reagisce all'evento "onkeyup" e vi rallenterebbe.
Questo è il file get_url_info.php protagonista della chiamata ajax che restituisce un file XML
<?php
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;
}
$url=addslashes($_POST['url']);
//trovo le informazioni relative all'url
$html = file_get_contents_curl($url);
//parsing begins here:
$doc = new DOMDocument();
@$doc->loadHTML($html);
$nodes = $doc->getElementsByTagName('title');
//get and display what you need:
$title = $nodes->item(0)->nodeValue;
$metas = $doc->getElementsByTagName('meta');
for ($i = 0; $i < $metas->length; $i++)
{
$meta = $metas->item($i);
if($meta->getAttribute('name') == 'description')
$description = $meta->getAttribute('content');
if($meta->getAttribute('name') == 'keywords')
$keywords = $meta->getAttribute('content');
}
if(strlen($title)==0){$title="Nessun titolo";}
if(strlen($description)==0){$description="Nessuna descrizione";}
header('Content-type: text/xml');
header('Pragma: public');
header('Cache-control: private');
header('Expires: -1');
$outstr.="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<informazioniurl>\n";
//genero il contenuto del file xml
$outstr.="\t<url>\n";
$outstr.="\t\t<title>".$title."</title>\n";
$outstr.="\t\t<description>".$description."</description>\n";
$outstr.="\t</url>\n";
$outstr.="</informazioniurl>\n";
echo $outstr;
?>