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)