2016-07-18 12 views
1

Dies ist ein Beispiel PHP-Code, der das Dom erstellt und speichert den HTML-Code.Wie erkennt man, wenn savehtml fehlschlägt?

$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(); 

Wie, können wir fangen, wenn das Speichern oder saveHTML() fehlschlägt?

Ich schätze jede Hilfe.

UPDATE:

Ich mag den Fang die Fehler in dem folgenden Code. Ich habe absichtlich eine zufällige Zeichenfolge konstruiert. Ich möchte diese Zeichenfolge in ein dom-Dokument laden und den Fehler abfangen.

<?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:

Der folgende Code wird fehlschlagen. d. h. es erkennt das nav-Tag beim Parsen nicht. Es gibt ein Fehler Tag nav in Entity ungültig.

<?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; 
} 



?> 

Nun, um den Fehler zu unterdrücken kann ich libxml_use_internal_errors verwenden (true); aber jetzt verschwindet die Fehlermeldung, aber $ dom-> saveHTML() gibt immer noch nicht false oder leer zurück, so dass es schwer ist zu wissen, wann saveHTML oder loadHTML einen Fehler hatte. Bitte helfen Sie !!

+0

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

+0

Entschuldigung ich habe das versucht und es hat nicht funktioniert. Ich bekomme nur Warnungen. – kofhearts

Antwort

1

Ich würde empfehlen, die PHP documentation page auf DOMDocument :: saveHTML zu lesen.

Wenn DOMDocument :: saveHTML fehlschlägt, wird false zurückgegeben. Wenn Sie libxml-Fehler deaktivieren und sie selbst abrufen möchten, sollten Sie die Verwendung von libxml_use_internal_errors in Erwägung ziehen.

<?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; 
} 

Fehler zu holen, die, verwenden Sie möglicherweise aufgetreten, wenn sie deaktiviert ist mit libxml Fehler waren libxml_get_errors:

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

Wenn Sie über eine der Fehlermeldungen nicht kümmern, die Sie gerade libxml_get_last_error nutzen könnten Wenn ein Fehler aufgetreten ist, wird ein LibXMLError-Objekt zurückgegeben, andernfalls false.

+0

Ich habe dies versucht und es gibt nur eine Warnung. – kofhearts

+0

Bitte finden Sie in meiner aktualisierten Antwort Informationen zum Deaktivieren von libxml-Fehlern. – anFfWuy7qbJWaPp6DSOR

+0

, die jetzt den Fehler verbirgt, aber immer noch können wir nicht wissen, wenn das loadHTML oder saveHTML fehlschlägt. Können Sie sich bitte die aktualisierte Antwort oben ansehen? – kofhearts

Verwandte Themen