2016-03-25 10 views
-1

Kann mir bitte jemand helfen, herauszufinden, was ich falsch in dem unten angegebenen Code getan habe.Fehler beim Parsen von HTML-Inhalten mit DOMDocument von PHP

Ich habe eine PHP-Variable news_content dessen benannten Wert ist die folgende html ...

<p><img src="./images/image1.jpeg" alt=""></p> 

Dieser Wert für variable news_content aus einer Datenbankabfrage erhalten wird.

Die Funktion erstellt unten, um ein DOMDocument Objekt die Variable news_content mit:

public function convert_to_tinymce_data($news_content) 
{ 
    $dom=new DOMDocument(); 

    $dom->loadHTML($news_content); 

    $img_nodes=$dom->getElementsByTagName('img'); 

    foreach($img_nodes as $link) 
    { 
     $img_link=$link->getAttribute('src'); 

     echo $link->getAttribute('src'); 

    } 
} 

Aber nichts hallte (eine leere Seite empfangen) wird.

+0

Haben Sie Fehlerberichte aktiviert? ('error_reporting (E_ALL); ini_set ('display_errors', 1);' oben im Skript); Wahrscheinlich ist Ihre HTML-Zeichenfolge leer. Andernfalls müssen Sie den HTML-Code posten. Mit korrektem HTML funktioniert das obige Skript. – fusion3k

+0

Wenn ich die HTML-Zeichenfolge direkt zuweisen, d. H. $ News_content = '

'; , dann Code funktioniert. Aber wenn es aus einer Datenbank abgerufen wird (wo es als Textdatentyp gespeichert wird) und dann in der Variablen ($ news_content) gespeichert wird, funktioniert es nicht, obwohl DOMDocument-Objekt erstellt wird (überprüft es mit " echo $ dom-> saveHTML() "). Und ja, ich habe überprüft, dass die Variable $ news_content nicht leer ist.Bitte irgendwelche Ideen.Vielen Dank – stackoverflownewbie

+0

Nein. Können Sie Post nach dem Hinzufügen von HTML aus der Datenbank bearbeiten? (wenn möglich, kopieren und einfügen direkt von phpMyAdmin Bearbeitungsformular) – fusion3k

Antwort

0

Ich habe diesen Code tryed und es funktioniert:

$n = '<p><img src="./images/image1.jpeg" alt=""></p>'; 

function convert_to_tinymce_data($news_content){ 
$dom=new DOMDocument(); 

$dom->loadHTML($news_content); 
$img_nodes=$dom->getElementsByTagName('img'); 

foreach($img_nodes as $link) { 
     $img_link=$link->getAttribute('src'); 
     echo $img_link; 
    } 
} 

convert_to_tinymce_data($n); 

Ich sehe, Sie haben public function, aber ich sehe nicht Klasse. Wenn es eine globale Funktion ist, keine Methode einer Klasse, ist das der Grund, warum es nicht funktioniert. Oder Sie rufen die Funktion nicht richtig auf.

(Was haben Sie dort Funktionsdefinition ist ... es aus, nachdem Sie es nennen ... gleiche Variablennamen in Ihrer Funktion Definition Having und außerhalb schlechte Praxis und können leicht in problematisch sein)

Nur hinzufügen: Überprüfen Sie, ob Sie eine error_log-Datei haben, und lassen Sie uns wissen, ob etwas Interessantes dabei ist ...

+0

Vielen Dank für Ihre Antwort. Nun, die Methode ist in einer Klasse (bin mit codeigniter) .Ich habe es nur nicht hier angezeigt.Wenn ich direkt die HTML zuweisen string zu einer Variablen (wie Sie es getan haben) funktioniert es, aber wenn es aus einer Datenbank abgerufen wird (wo es als Textdatentyp gespeichert wird) und dann in der Variable ($ news_content) gespeichert wird, funktioniert es nicht, obwohl das DOMDocument-Objekt es bekommt erstellt (überprüft mit "echo $ dom-> saveHTML()") – stackoverflownewbie

+0

Führe 'var_dump ($ news_content);' nach Erhalt des Wertes aus der Datenbank aus. Sehen Sie, was sich zwischen diesem und dem Arbeitsbeispiel unterscheidet und passen Sie es dann an. –

+0

Vielen Dank für Ihre Antwort.Strange, der Code, der nicht früher funktionierte (und ich ehrlich gesagt es viele Male zum Testen ausgeführt) hat plötzlich angefangen, richtige Ausgabe zu geben (und ich weiß nicht wie). Und natürlich habe ich auch deinen var_dump-Vorschlag ausprobiert. Aber irgendwie fing der Code an zu arbeiten, bevor irgendwelche Änderungen notwendig waren. Aber danke für deine großartige Unterstützung und Anleitung – stackoverflownewbie