Uyarı: DOMDocument :: loadHTML (): htmlParseEntityRef: bekliyordum ';'

7 Cevap
$html = file_get_contents("http://www.somesite.com/");

$dom = new DOMDocument();
$dom->loadHTML($html);

echo $dom;

atar

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

7 Cevap

Ben size kaynağında baktı http://www.somesite.com/ HTML dönüştürülür henüz özel karakterleri bulmak olacağını bahse girerim. Belki böyle bir şey:

<a href="/script.php?foo=bar&hello=world">link</a>

Olmalı

<a href="/script.php?foo=bar&amp;hello=world">link</a>
$dom->@loadHTML($html);

Bu yanlış, bunun yerine kullanın:

@$dom->loadHTML($html);

Uyarıyı buharlaşmasına, kullanabilirsiniz libxml_use_internal_errors(true). Link

Lütfen ölümcül hata nedeni DOMDocument bir __ toString () yöntemi yoktur ve dolayısıyla echo'ed edilemez.

Muhtemelen arıyoruz

echo $dom->saveHTML();

2 hataları vardır: $ dom hiçbir dize ama bir nesne ve böylece "yankılandı" olamaz çünkü ikinci. İlk hata yüklemek için html belgenin geçersiz sözdizimi neden loadHTML bir uyarı, (muhtemelen bir parametre ve ayırıcı olarak kullanılan ve & ile varlık olarak maskeli değil).

Sen hata kontrol operatörü ile işlevini çağırarak bu hata mesajı (değil hata, sadece mesaj!) Görmezden ve gizlensin "@" (http://www.php.net/manual/en/language.operators.errorcontrol. php)

$dom->@loadHTML($html);

Bir özel durum ne olursa olsun eğer echo (print_r veya var_dump ile değiştirilmesi gereken hangi), nesne boş kalmalıdır:

DOMNodeList Object
(
)

Solution

  1. recover ayarlanmış true, ve strictErrorChecking false

    $content = file_get_contents($url);
    
    $doc = new DOMDocument();
    $doc->recover = true;
    $doc->strictErrorChecking = false;
    $doc->loadHTML($content);
    
  2. En yaygın hata, kaynak yüzdem içeriğine php varlık-kodlamasını kullanın.

Başka bir çözüm Possibile

$sContent = htmlspecialchars($sHTML);
$oDom = new DOMDocument();
$oDom->loadHTML($sContent);
echo html_entity_decode($oDom->saveHTML());