2017-09-22 11 views
0

Ich habe eine grundlegende Blog-Anwendung, die Redactor als Mittel zur Eingabe von Text verwendet. Wenn Bilder hochgeladen werden, werden sie jedoch als HTML-Tags im Feld "body" gespeichert. Zum Beispiel:Yii2 Redactor Widget

<p>Test blog post</p><p><img src="/uploads/11/4d3ca0098c-dsc9011.jpg"></p>

ist das, was in dem 'Körper' Feld gespeichert wird.

Dies ist, wie ich das Abrufen und die Anzeige der Daten:

foreach($dataProvider->getModels() as $post){ 
    echo Html::a('<div class="well well-sm" id="inner"><h3>'.$post->subject.'</h3>', '/post/view?id=' .$post->id); 
    echo 'Posted By: ' .$post->user->username . ' <br/><i class = "glyphicon glyphicon-time"></i> '.Yii::$app->formatter->asDatetime($post->updated_at) . '<br/>Views: ' .$post->view_count .'</div>'; 
} 

Gibt es eine Weise, die ich dort eine 'if' Anweisung hinzufügen

if ($post->body contains <img> tag) { display <img> }

Antwort

1

strstr() zu sagen Searcjhes für eine Zeichenfolge innerhalb einer Zeichenfolge http://php.net/manual/en/function.strstr.php

So Sie c Ould versuchen:

if (strstr($post->body, '<img ')) { 

Eine andere Möglichkeit, den Tag greifen könnten einige regex sein, obwohl es auf der HTML je Mismatch könnte:

<?php 

$html = '<html> 
<head> 
<etc /> 
</head> 
<body> 
<div><img src="blah.jpg" /></div><br /> 
</body> 
</html>'; 

$regex = '#<img .*?\/>#'; 

preg_match($regex, $html, $matches); 

var_dump($matches[0]); 

denen Ausgabe string(22) "<img src="blah.jpg" />"

Hier ist der Code https://3v4l.org/4NCNs

Hier ist die Regex https://regex101.com/r/m1IYpx/1/

+0

Danke genau was ich brauchte. Hast du eine Idee, wie ich dann das Bild-Tag aus dem Körper extrahieren könnte? – Kyle

+1

Dies ist wahrscheinlich nicht der beste Weg, es dann zu tun. Sie könnten es in ein DOMDocument laden und dann Elemente per Tag http://php.net/manual/en/domodocument.getelementsbytagname.php erhalten. Der andere Weg versucht auch eine Regex-Übereinstimmung (nicht empfohlen) – delboy1978uk