我需要在字符串中包含任何img标记,并在其周围添加一个标记。
E.g。
$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的对象无法转换为字符串
关于我哪里出错的任何想法?
答案 0 :(得分:2)
使用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);
}
答案 1 :(得分:0)
$ content是一个无法转换为字符串的对象
要测试它,请使用var_dump($content);
你无法直接回应它
使用DOM提供的属性和方法,您可以从这里获得:DOM Elements
答案 2 :(得分:0)
getElementsByTagName
返回包含所有匹配元素的DOMNodeList对象。所以$ tag在这里是DOMNodelist :: item,因此不能直接在字符串操作中使用。你需要获得nodeValue
。更改foreach代码如下:
foreach($imageTags as $tag) {
$content = preg_replace("/<img[^>]+\>/i", "<a href=\"$tag->nodeValue\"><img src=\"$tag->nodeValue\" /></a>", $content);
}
答案 3 :(得分:0)
我认为这里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;
希望这会有所帮助:)