web-dev-qa-db-ja.com

Dom loadHTMLはサーバー上で正しく機能しません

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');
?>

誰が何が起こっているか知っていますか?ありがとう!

25
LuZ

警告を無効にするには、次を使用できます。

libxml_use_internal_errors(true);

これは私のために動作します。 手動

背景:無効なHTMLを読み込んでいます。無効なHTMLは非常に一般的です DOMDocument::loadHTML はほとんどの問題を修正しますが、デフォルトで警告を出します。

libxml_use_internal_errors この動作を制御できます。ドキュメントをロードする前に設定します。

libxml_use_internal_errors(true);
$doc->loadHTML($Amazon);
109
hakre

この問題は、非xHTMLコードに関連しています

DOMdocument()はclean XHTMLのみを処理できるため、クリーンアップする必要がありますあなたのコード

PHPには、非常にうまく機能する拡張機能があります。 Tidyと呼ばれる php.net/book.tidy

enablephp.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);
5
Pascal

次のように警告を抑制することができます。

@$doc->loadHTML($Amazon);
4
Aminah Nuraini