PHP - 删除图像标记并替换为Alt

时间:2013-12-15 09:33:31

标签: 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'/>

如何将其转换为:

Hi this is a photo of me (myself). Another pic of me (image)

基本上我想删除字符串中的所有图像,如果有的话,用alt标记替换它们。如果不是,那就应该说'图像'。

2 个答案:

答案 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()
  • 加载HTML字符串
  • 使用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)

Demo.