如果我有这样的字符串:
Hi this is a photo of me <img src='myself.jpg' alt='pic of me' />. Another pic of me <img src='abc.jpg'/>
如何将其转换为:
Hi this is a photo of me (myself). Another pic of me (image)
基本上我想删除字符串中的所有图像,如果有的话,用alt标记替换它们。如果不是,那就应该说'图像'。
答案 0 :(得分:1)
这样的事情应该有效:
preg_match_all('/\<img[^\>]*\>/', $yourString, $matches);
foreach ($matches as $match)
{
$replacement = 'image';
if (preg_match('/alt=\'([^\']+)\'/', $match, $matches2))
$replacement = $matches2[1];
$yourString = str_replace($match, '('.$replacement.')', $yourString);
}
它做什么:找到所有img标签并将它们带到$ matches数组。循环通过它们并寻找alt值。如果存在,则IMG标记将替换为(ALT VALUE),否则将替换为(图像)。
答案 1 :(得分:1)
我使用DOM parser代替正则表达式。方法如下:
loadHTML()
getElementsByTagName()
获取所有图片alt
属性。
alt
属性,请将$replacement
变量的值设置为alt
属性。 alt
属性,请将$replacement
设置为(image)
。 replaceChild()
将节点替换为新创建的文本节点:代码:
$html = <<<HTML
Hi this is a photo of me <img src='myself.jpg' alt='pic of me' />
another pic of me <img src='abc.jpg'/>
HTML;
$dom = new DOMDocument;
$dom->loadHTML($html);
$images = $dom->getElementsByTagName('img');
$i = $images->length - 1;
while ($i > -1) {
$node = $images->item($i);
if ($node->hasAttribute('alt')) {
$replacement = '('.$node->getAttribute('alt').')';
}
else {
$replacement = '(image)';
}
$text = $dom->createTextNode($replacement."\n");
$node->parentNode->replaceChild($text, $node);
$i--;
}
echo strip_tags($dom->saveHTML());
输出:
Hi this is a photo of me (pic of me)
another pic of me (image)