$html = file_get_contents("http://www.somesite.com/");
$dom = new DOMDocument();
$dom->loadHTML($html);
echo $dom;
던지다
Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity,
Catchable fatal error: Object of class DOMDocument could not be converted to string in test.php on line 10
답변
경고를 증발 시키려면 다음을 사용할 수 있습니다. libxml_use_internal_errors(true)
// create new DOMDocument
$document = new \DOMDocument('1.0', 'UTF-8');
// set error level
$internalErrors = libxml_use_internal_errors(true);
// load HTML
$document->loadHTML($html);
// Restore error level
libxml_use_internal_errors($internalErrors);
답변
소스를 살펴보면 http://www.somesite.com/
HTML로 변환되지 않은 특수 문자를 찾을 수있을 것입니다. 아마도 다음과 같습니다.
<a href="/script.php?foo=bar&hello=world">link</a>
해야한다
<a href="/script.php?foo=bar&hello=world">link</a>
답변
$dom->@loadHTML($html);
이것은 올바르지 않습니다. 대신 다음을 사용하십시오.
@$dom->loadHTML($html);
답변
두 가지 오류가 있습니다. 두 번째는 $ dom이 문자열이 아니라 객체이므로 “반향”될 수 없기 때문입니다. 첫 번째 오류는로드 할 html 문서의 잘못된 구문으로 인해 발생하는 loadHTML의 경고입니다 (아마도 & (앰퍼샌드)가 매개 변수 구분 기호로 사용되고 &로 엔티티로 마스킹되지 않음).
오류 제어 연산자 “@”( http://www.php.net/manual/en/language.operators.errorcontrol. PHP )
@$dom->loadHTML($html);
답변
치명적인 오류의 이유는 DOMDocument 에 __toString () 메서드가 없으므로 에코 될 수 없기 때문입니다.
당신은 아마 찾고 있습니다
echo $dom->saveHTML();
답변
에코 (print_r 또는 var_dump로 대체해야 함)에 관계없이 예외가 발생하면 객체는 비어 있어야합니다.
DOMNodeList Object
(
)
해결책
-
설정
recover
true로하고,strictErrorChecking
false로$content = file_get_contents($url); $doc = new DOMDocument(); $doc->recover = true; $doc->strictErrorChecking = false; $doc->loadHTML($content);
-
가장 일반적인 오류 소스 인 마크 업의 내용에 PHP의 엔티티 인코딩을 사용합니다.
답변
단순한 것을 대체하십시오
$dom->loadHTML($html);
더 강력한 …
libxml_use_internal_errors(true);
if (!$DOM->loadHTML($page))
{
$errors="";
foreach (libxml_get_errors() as $error) {
$errors.=$error->message."<br/>";
}
libxml_clear_errors();
print "libxml errors:<br>$errors";
return;
}