MAMPで最初にコードを実行すると、非常にうまく機能しました。しかし、別のサーバーでコードを実行しようとすると、次のような多くの警告が表示されました。
警告:DOMDocument :: loadHTML():予期しない終了タグ:エンティティのヘッド、行:17行目の/cgihome/zhang1/html/cgi-bin/getPrice.phpの3349警告:DOMDocument :: loadHTML():htmlParseStartTag:misplacedエンティティのタグ、行:17行目の/cgihome/zhang1/html/cgi-bin/getPrice.phpの3350警告:DOMDocument :: loadHTML():エンティティのタグヘッダーが無効です、行:/ cgihome/zhang1/htmlの3517 17行目の/cgi-bin/getPrice.php
コードは次のとおりです。
<?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');
?>
誰が何が起こっているか知っていますか?ありがとう!
警告を無効にするには、次を使用できます。
libxml_use_internal_errors(true);
これは私のために動作します。 手動
背景:無効なHTMLを読み込んでいます。無効なHTMLは非常に一般的です DOMDocument::loadHTML
はほとんどの問題を修正しますが、デフォルトで警告を出します。
libxml_use_internal_errors
この動作を制御できます。ドキュメントをロードする前に設定します。
libxml_use_internal_errors(true);
$doc->loadHTML($Amazon);
この問題は、非xHTMLコードに関連しています
DOMdocument()はclean XHTMLのみを処理できるため、クリーンアップする必要がありますあなたのコード
PHPには、非常にうまく機能する拡張機能があります。 Tidyと呼ばれる php.net/book.tidy
enableをphp.iniで有効にする必要があるため、注意が必要です。
それから
$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);
次のように警告を抑制することができます。
@$doc->loadHTML($Amazon);