2016-07-18 3 views
1

これはdomを作成し、htmlを保存するサンプルPHPコードです。savehtmlが失敗したときの検出方法?

$doc = new DOMDocument('1.0'); 

$root = $doc->createElement('html'); 
$root = $doc->appendChild($root); 

$head = $doc->createElement('head'); 
$head = $root->appendChild($head); 

$title = $doc->createElement('title'); 
$title = $head->appendChild($title); 

$text = $doc->createTextNode('This is the title'); 
$text = $title->appendChild($text); 

echo $doc->saveHTML(); 

saveまたはsaveHTML()が失敗した場合、どのように捕捉できますか?

何か助けていただきありがとうございます。

更新日:

次のコードでエラーをキャッチします。私は意図的にランダムな文字列を構築しました。この文字列をdomドキュメントにロードしてエラーをキャッチしたいと思います。

<?php 


$str = "uyiuyiuhkjh<><><.,><.<."; 
$dom = new DOMDocument; 
$dom->loadHTML($str); 

$saved = $dom->saveHTML(); 


//This doesnt work. 
if ($saved === false){ 

    echo 'Unable to save DOM document'; 

} 
else{ 

    echo $saved; 
} 



?> 

UPDATE 2:

次のコードは失敗します。すなわち、解析中にnavタグを認識しない。これは、エンティティで無効なタグナビを与えます。

<?php 


$str = "<html> <head> </head> <body> <nav> </nav> </body> </html>"; 
$dom = new DOMDocument; 
$dom->loadHTML($str); 

$saved = $dom->saveHTML(); 

if ($saved === false){ 

    echo 'Unable to save DOM document'; 

} 
else{ 

    echo $saved; 
} 



?> 

ここで、エラーを抑制するために、私はlibxml_use_internal_errors(true)を使用できます。エラーメッセージが表示されなくなりましたが、$ dom-> saveHTML()はfalseまたは空を返しません。そのため、saveHTMLまたはloadHTMLにエラーが発生したときを知ることは困難です。助けてください!!

+0

'$ foo = $ doc-> saveHTML(); if(empty($ foo)){die( "Ruhroh"); } ' –

+0

私はこれを試して、それは動作しませんでした。私は警告を受けるだけです。 – kofhearts

答えて

1

DOMDocument :: saveHTMLでPHP documentation pageを読むことをお勧めします。

DOMDocument :: saveHTMLが失敗すると、falseを返します。 libxmlエラーを無効にして自分でフェッチする場合は、libxml_use_internal_errorsを使用することを検討してください。 libxmlエラーを使用するときに発生したエラーを取得するために

<?php 

libxml_use_internal_errors(true); 

$doc = new DOMDocument('1.0'); 

$root = $doc->createElement('html'); 
$root = $doc->appendChild($root); 

$head = $doc->createElement('head'); 
$head = $root->appendChild($head); 

$title = $doc->createElement('title'); 
$title = $head->appendChild($title); 

$text = $doc->createTextNode('This is the title'); 
$text = $title->appendChild($text); 

$saved = $doc->saveHTML(); 

if ($saved === false) { 
    echo 'Unable to save DOM document'; 
} else { 
    echo $saved; 
} 

が無効になっていた、libxml_get_errorsを使用します。

if ($errors = libxml_get_errors()) { 
    foreach ($errors as $error) { 
     echo $error->message . PHP_EOL; 
    } 
} 

あなたはエラーメッセージのいずれかを気にしない場合は、あなただけのlibxml_get_last_errorを使用することができますエラーが発生した場合はLibXMLErrorオブジェクトを返し、そうでない場合はfalseを返します。

+0

私はこれを試して、それは警告を与えるだけです。 – kofhearts

+0

libxmlエラーを無効にする方法については、最新の回答を参照してください。 – anFfWuy7qbJWaPp6DSOR

+0

はエラーを隠しますが、loadHTMLまたはsaveHTMLが失敗したときはまだわかりません。あなたは上記の更新された答えを見ていただけますか? – kofhearts

関連する問題