PHP-删除图像标记并替换为Alt
如果我有这样一个字符串:PHP-删除图像标记并替换为Alt,php,regex,string,Php,Regex,String,如果我有这样一个字符串: Hi this is a photo of me <img src='myself.jpg' alt='pic of me' />. Another pic of me <img src='abc.jpg'/> 基本上,我想从一个字符串中删除所有图像,如果它有一个alt标记,则用它们替换它们。如果没有,则应该只显示“图像”。类似的内容应该可以: preg_match_all('/\<img[^\>]*\>/', $yourSt
Hi this is a photo of me <img src='myself.jpg' alt='pic of me' />. Another pic of me <img src='abc.jpg'/>
基本上,我想从一个字符串中删除所有图像,如果它有一个alt标记,则用它们替换它们。如果没有,则应该只显示“图像”。类似的内容应该可以:
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);
}
preg\u match\u all('/\]*\>/',$yourString,$matches);
foreach($matches作为$match进行匹配)
{
$replacement='image';
if(preg_match('/alt=\'([^\']+)\'/',$match,$matches2))
$replacement=$matches2[1];
$yourString=str_replace($match,“('.$replacement'),$yourString);
}
它的作用:找到所有img标记并将它们放到$matches数组中。循环浏览它们并查找alt值。如果存在,则IMG标记将替换为(ALT VALUE),否则将替换为(image)。我将使用一个而不是正则表达式。以下是方法:
- 使用加载HTML字符串
- 用于获取所有图像
- 循环浏览它们并检查图像是否具有
属性。alt
- 如果图像具有
属性,请将alt
变量的值设置为$replacement
属性李>alt
- 如果图像没有
属性,请将alt
设置为$replacement
李>(图像)
- 如果图像具有
- 用于将节点替换为新创建的文本节点:
您的代码在哪里?你们试过什么了?最好是使用HTMLDOM解析器库。Javascript会很好,但在这种情况下,我需要它用于php。我不理解那个评论。PHP有HTML解析器。哦,我还以为你在javascript中指的是dom。如果图像不包含alt标记,会显示什么?不会有匹配项,所以你不会替换任何语言
$matches[1]$匹配[1]:。我相信我们会在这里找到一些东西:)这比使用正则表达式快吗?正则表达式可能会更快。但是,如果一个人给出了错误的结果,那么哪一个更快是重要的吗?好的,但是在你的例子中,如果图像上没有alt属性,它会做什么?@Nuvolari:如果没有alt
属性,它现在只会显示文本的其余部分。顺便说一句,你可以自己测试一下。好的,我怎么做才能在没有alt的情况下显示:“(图像)”呢?
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);
}
$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)