Je lance le code d'abord sur MAMP et cela a très bien fonctionné. Mais lorsque j'ai essayé d'exécuter le code sur un autre serveur, j'ai reçu de nombreux avertissements tels que:
Avertissement: DOMDocument :: loadHTML (): balise de fin inattendue: head dans Entity, ligne: 3349 dans /cgihome/zhang1/html/cgi-bin/getPrice.php à la ligne 17 Avertissement: DOMDocument :: loadHTML (): htmlParseStartTag: balise mal placée dans Entity, line: 3350 dans /cgihome/zhang1/html/cgi-bin/getPrice.php sur ligne 17 Avertissement: DOMDocument :: loadHTML (): en-tête de balise invalide dans Entity, line: 3517 dans /cgihome/zhang1/html/cgi-bin/getPrice.php sur ligne 17
Les codes sont les suivants:
<?php
$Amazon = file_get_contents('http://www.Amazon.com/blablabla');
$doc = new DOMdocument();
$doc->loadHTML($Amazon);
$doc->saveHTML();
$price = $doc -> getElementById('actualPriceValue')->textContent;
$ASIN = $doc -> getElementById('ASIN')->getAttribute('value');
?>
Quelqu'un sait ce qui se passe? Merci!
Pour désactiver l'avertissement, vous pouvez utiliser
libxml_use_internal_errors(true);
Cela fonctionne pour moi. Manuel
Arrière-plan: vous chargez du HTML non valide. Le HTML invalide est assez courant, DOMDocument::loadHTML
corrige la plupart des problèmes, mais donne des avertissements par défaut.
Avec libxml_use_internal_errors
vous pouvez contrôler ce comportement. Définissez-le avant de charger le document:
libxml_use_internal_errors(true);
$doc->loadHTML($Amazon);
Ce problème est lié au code non xHTML
Comme DOMdocument () ne peut traiter que clean XHTML, vous devez nettoyer votre code
Les PHP ont une extension qui fait assez bien le travail. Appelé Tidy php.net/book.tidy
Cela peut être délicat car vous aurez peut-être besoin de le activer dans votre php.ini
Ensuite
$tidy_config = array(
'clean' => true,
'output-xhtml' => true,
'show-body-only' => true,
'wrap' => 0,
);
$tidy = tidy_parse_string( $html, $tidy_config, 'UTF8');
$tidy->cleanRepair();
$doc = new DOMdocument();
$doc->loadHTML( (string) $tidy);
Vous pouvez supprimer l'avertissement comme ceci:
@$doc->loadHTML($Amazon);