2017-09-22 128 views
0

我有一个基本的博客应用程序,它使用redactor作为输入文本的方法。但是,当图像上传时,它们将作为HTML标签保存在“body”字段中。例如:Yii2编辑器小部件

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

就是被保存在 '主体' 字段。

这是怎么了检索和显示数据:

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

有没有一种方法,我可以在里面添加一个“如果”声明说

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

回答

1

strstr()搜索字符串中的字符串http://php.net/manual/en/function.strstr.php

所以你c乌尔德尝试:

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

另一种方式来获取标签可能会有一些正则表达式,但它可能取决于HTML不匹配:

<?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]); 

将输出string(22) "<img src="blah.jpg" />"

下面的代码https://3v4l.org/4NCNs

这里是正则表达式https://regex101.com/r/m1IYpx/1/

+0

正是我所需要的。你有什么想法,然后我可以从身体中提取图像标签? – Kyle

+1

这可能不是最好的方法。您可以将它加载到DOMDocument中,然后通过标记http://php.net/manual/en/domdocument.getelementsbytagname.php获取元素。另一种方法是尝试正则表达式匹配(不推荐) – delboy1978uk