我正在开发一个移动网络,其内容来自国外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标签的数组。