Page 1 sur 1

UTF8 , decode, encode, special entities ???

Posté : 12 juil. 2007, 18:31
par AVI3000
Bonjour,
$doc = @DOMDocument::loadHTMLFile(url);
echo $doc->saveHTML();
Résultat:
L'Italien Filippo Pozzato (Liquigas) a remporté au sprint la cinquième étape du Tour de France entre Chablis et Autun, au terme d'une étape mouvementée. Il a devancé l'Espagnol Oscar Freire et son compatriote Daniele Bennati (Lampre). Le Suisse Fabien Cancellara (CSC) a conservé le maillot jaune de leader.

La page HTML d'origine contient ceci:

Code : Tout sélectionner

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
entre les decode, encode, special entities, ..... , que choisir :?: :?:

Merci

Posté : 12 juil. 2007, 19:16
par @rthur
Bonjour,

utf8_decode() devrait suffire normalement... ;)

Posté : 12 juil. 2007, 21:02
par AVI3000
j'avais trop simplifié mon exemple
ce code fonctionne.
inputDoc = @DOMDocument::loadHTMLFile($goto);
echo utf8_decode(inputDoc->saveHTML()) ;
résultat (au milieu de bien d'autre chose):
L'Italien Filippo Pozzato (Liquigas) a remporté au sprint la cinquième étape du Tour de France


mais celui-ci non
inputDoc = @DOMDocument::loadHTMLFile($goto);
$xpath = new DOMXPath(inputDoc);
$outputDoc = new DOMDocument();

$aNode = $xpath->query('//div[@class="caletexte"]')->item(0) ;
if ( $aNode )    $outputDoc->appendChild(outputDoc->importNode($aNode, TRUE)) ;
echo utf8_decode($outputDoc->saveHTML());
résultat:
L'Italien Filippo Pozzato (Liquigas) a remporté au sprint la cinquième étape du Tour de France?>


celui-ci fonctionnerait presque correctement,
mais lourd le décodage élément par élément
et je perds les marque <b> </b>
.......
if ( $aNode )    $outputDoc->appendChild(outputDoc->importNode($aNode, TRUE)) ;

$xpath = new DOMXPath($outputDoc);
foreach ( $xpath->query('//p') as $e ) {
        $e->nodeValue = utf8_decode($e->nodeValue) ;
}
echo $outputDoc->saveHTML();
celui-ci fonctionne correctement, en étant relativement propre
$doc = @DOMDocument::loadHTMLFile("http://www.lequipe.fr/Rugby/20070713_103904Dev.html");
$meta = $doc->getElementsByTagName('meta')->item(0);
$meta->setAttribute("content", "text/html; charset=iso-8859-1") ;
$doc = @DOMDocument::loadHTML(utf8_decode($doc->saveHTML())) ; /* convertit la page d'origine */

/* on peut maintenant manipuler la page convertie */
$xpath = new DOMXPath($doc);
$doc2 = new DOMDocument;
$doc2->appendChild($doc2->importNode($xpath->query('//div[@class="caletexte"]')->item(0), TRUE)) ;

echo $doc2->saveHTML();
si vous avez mieux, n'hésitez pas

pour tester: Url=http://www.lequipe.fr/Rugby/20070712_191853Dev.html (par exemple)

Merci