我正在开发一个移动网络,其内容来自外国XML,我在使用标签时遇到问题。它们带有样式属性,我认为在显示内容之前使用preg_replace在php中很容易擦除它们。当在文本中找到img标记时会出现问题......类似于:"Hel<img .../>lo My name is Alfred<br/>"
。如果我只是擦除了样式属性(通常带有display:float),则图像会破坏文本,使其难以阅读。
我的解决方案是:使用preg_replace,我“清理”所有图片代码,但是我需要抓住这些代码并将它们放在下一个<br/>
之后,</p>
等等(段落标签的每个最后一个)。我认为它至少会使页面更具可读性和组织性。
问题:不知道如何获取每个img标记的索引,就在我清理它之后,然后找到段落的下一个结尾将其放在那里。
实施例 - &GT;
之前:
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文档读取为字符串)所以我可以将整个标记移动到段落的下一端?
答案 0 :(得分:0)
你不会从任何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 );
将返回$ withoutimg中的块以及$ imgs中包含两个img标记的数组。