2016-04-08 4 views
0

Ich habe eine Datenbankabfrage, die den HTML-Code für eine Seite zurückgibt, aber wenn ich sie auf meiner Seite verwende, wird sie als normaler Text angezeigt. . Wie würde ich es als HTML formatieren, so dass es die Tags und dergleichen verwendet.Rufen Sie HTML aus der Datenbank ab und formatieren Sie ihn als HTML anstelle von Nur-Text

Ein Beispiel dessen, was ich in meiner Datenbank haben:

<div class="test">SOME TEXT HERE</div> 

Aber es ist auch so angezeigt. Ich möchte, dass der Text so formatiert wird, als wäre es HTML. So würde es nur an:

SOME TEXT HERE

aber, dass es auch in einem div mit der Klasse sein würde: "test"

Was ist der beste Ansatz wäre, dies zu erreichen, Tor?

Ich verwende Twig im MVC-Modell, um die Seite zu rendern. So ist die Seite Renderer ist wie diese

public function renderArticle() { 
     $twig = new TwigHelper(); 
     $args['title'] = "Artikel $this->articleId"; 
     $args['blogHTML'] = BlogController::retrieveBlogHTML($this->articleId); 
     echo $twig->render('article.twig', $args); 
    } 

und die „BlogController :: retrieveBlogHTML“ geht so:

public static function retrieveBlogHTML($id) { 
    $db = DatabaseHelper::get(); 
    $st = $db->prepare("SELECT PageHTML FROM T_Blog WHERE BlogId = :BlogId"); 
    $st->execute([ 
     ':BlogId' => $id, 
    ]); 
    if ($st->errorCode() !== \PDO::ERR_NONE) { 
     return null; 
    } 
    return $st->fetchAll(); 
} 

Das bedeutet, dass ich nicht in der Lage sein, JavaScript zu diesem Zeitpunkt zu verwenden, Wenn das der einzige Weg ist, um das Problem zu beheben, muss ich einen Workaround erstellen.

Also ich weiß nicht, ob ich zufällig auch oder etwas in diese Richtung entfliehen, aber ich verwende keine Header.

+0

Wie rufen Sie das div ab? Ajax? Server-Seitencode? – Max

+1

Das ist wahrscheinlich eine Frage der Einstellung der richtigen Content-Header, oder vielleicht versehentlich aus dem HTML entkamen. Sie sollten wirklich mehr Details und etwas Code Ihres gegenwärtigen Prozesses geben. – GolezTrol

+0

Es tut mir leid für meine späte Antwort, aber ich habe meine Hauptpost mit einigen weiteren Informationen darüber, wie ich die Daten abrufen, aktualisiert. –

Antwort

2

Sie müssen die HTML-Zeichen zu entkommen (so < wird &lt; zum Beispiel).

In Javascript können Sie die HE library oder Theres diese Funktion verwenden, die in der Regel in Ordnung ist, aber nicht alle möglichen Fälle abdecken, dass die HE-Bibliothek tut

var encodedStr = rawStr.replace(/[\u00A0-\u9999<>\&]/gim, function(i) { 
    return '&#'+i.charCodeAt(0)+';'; 
}); 

Wenn Ihr mit PHP Sie htmlentities verwenden können, Andere Sprachen haben eine ähnliche Funktion, entweder eingebaut oder über eine Bibliothek bereitgestellt.

+0

Im Moment benutze ich Javascript nicht, um die Daten abzurufen. Ich habe meinen Hauptbeitrag aktualisiert, um zu zeigen, wie ich die Informationen abrufe. Sorry für die späte Antwort BTW. –

+0

Ich dachte, Zweig zu Autocaping voreingestellt? In jedem Fall können Sie HTML-Escaping erzwingen, indem Sie '{{blogHTML.PageHTML | e}}' oder '{{blogHTML.PageHTML | escape}}' verwenden. Siehe hier: http://twig.sensiolabs.org/doc/filters/escape.html – Lee

Verwandte Themen