PHP preg_replace替换img标签并将它们移动到html文本中


PHP preg_replace to replace img tags and move them within html text

我正在开发一个移动网络,其内容来自国外XML,我有标签的麻烦。它们带有样式属性,我认为在显示内容之前使用preg_replace在php中很容易删除。当在文本中找到img标签时,问题就出现了。比如:"Hel<img .../>lo My name is Alfred<br/>"。如果我只是擦除style属性(通常与display:float一起出现),图像会破坏文本,使其难以阅读。

我的解决方案是:使用preg_replace,我"清洁"所有图像标签,但是然后我需要将这些标签放在下一个<br/>, </p>等(段落标签的每个final)之后。我认为这至少会让页面更有可读性和组织性。

问题:不知道如何得到每个img标签的索引,就在我清理它之后,然后找到下一个段落的结束,把它放在那里。

例子——>

:

Hell<img .../>o my name is Alfred.<br/>
<p>I come <img .../>from England</p>

:

Hello my name is Alfred<br/>
<img .../>
<p>I come from England</p>
<img .../>

提前感谢。

编辑,

我的疑问是:如果我在文本中发现了一个img标签(<img />)(可能使用preg_replace,因为我首先需要找到一个img标签,验证其属性并在必要时更改它们),我如何获得整个字符串内的索引(通过整个字符串,我的意思是整个html文档作为字符串读取),所以我可以把整个标签并将其移动到段落的下一个结束?

您不会从任何preg_函数中获得匹配的位置。另一方面,您可以使用preg_replace_callback进行替换,并将匹配项堆积起来,然后打印它们。例子:

function noimages( $match )
{
  $stack = array();
  $img_regex = '%<img.*(/>|</img>)%ixU';
  $noimages = preg_replace_callback($img_regex, 
    function ($imgtag) use(&$stack) { array_push($stack, $imgtag[0]); return ''; },
    $match);
  return array($noimages,$stack);
}

例如:

$match = '<p>I'm not <img src="yyy.jpg"/> interested on this <img src="zzz.jpg"></img> issue </p>';
list($withoutimg, $imgs) = noimages( $match );

将返回$without格式的块和$imgs格式的包含两个img标签的数组。