我需要获取字符串中的任何img标记,并在其周围添加一个标记。
例如
$content= "Click for more info <img src="'http://www.domain.com/1.jpg'"" />";
需要更换为
"Click for more info <a href='"http://www.domain.com/1.jpg'"<img src="'http://www.domain.com/1.jpg'"" /></a>";
我当前的脚本是:
$content = $row_rsGetStudy['content'];
$doc = new DOMDocument();
$doc->loadHTML($content);
$imageTags = $doc->getElementsByTagName('img');
foreach($imageTags as $tag) {
$content = preg_replace("/<img[^>]+'>/i", "<a href='"$tag'"><img src='"$tag'" /></a>", $content);
}
echo $content
这给了我以下错误:可捕获的致命错误:DOMElement类的对象无法转换为字符串
你知道我哪里错了吗?
使用DOM方法,类似这样的东西(未经测试,自行调试;p)
foreach($imageTags as $tag) {
$a = $tag->ownerDocument->createElement('a');
$added_a = $tag->parentNode->insertBefore($a,$tag);
$added_a->setAttribute('href',$tag->getAttribute('src'));
$added_a->appendChild($tag);
}
要测试它,请使用
var_dump($content);
你不能直接回显它。
使用DOM提供的属性和方法,您可以从这里获得:DOM元素
getElementsByTagName
返回包含所有匹配元素的DOMNodeList对象。所以$tag在这里是DOMNodelist::项,因此不能直接在字符串操作中使用。你需要得到nodeValue
。更改foreach代码如下:
foreach($imageTags as $tag) {
$content = preg_replace("/<img[^>]+'>/i", "<a href='"$tag->nodeValue'"><img src='"$tag->nodeValue'" /></a>", $content);
}
我认为这里的DOMDocument没有从字符串加载HTML。一些奇怪的问题。我更喜欢使用DOM解析器,如SimpleHTML
你可以像这样使用它:
$content= 'Click for more info <img src="http://www.domain.com/1.jpg" />';
require_once('simple_html_dom.php');
$post_dom = str_get_html($content);
$img_tags = $post_dom->find('img');
$images = array();
foreach($img_tags as $image) {
$source = $image->attr['src'];
$content = preg_replace("/<img[^>]+'>/i", "<a href='"$source'"><img src='"$source'" /></a>", $content);
}
echo $content;
希望这有帮助:)