PHP:使用preg_replace替换错误的HTML。

时间:2016-03-29 07:24:14

标签: php html regex replace preg-replace

我正在用PHP替换特定的img标签。 但是......到目前为止表现不佳。

代码在

之下
define('IMG_REG', '/<img.*?>/i');

$str = '<p>aaa</p><img src="aaa" >
<p>iii</p><img src="aaa" >
<p>uuu</p><img src="aaa" >
<p>eee</p><img src="aaa" >
<p>ooo</p><img src="aaa" >' ;

$num = 3;

if ( preg_match_all(IMG_REG, $str, $m, PREG_OFFSET_CAPTURE) > $num-1 ) {

    $target = $m[0][$num-1][0];
    $new = $target.'!!!';

    if( $target != NULL ):
        $str = preg_replace( $target, $new, $str, $num);
    endif;
}
echo $str;

我想将第3个“img tag”更改为“img tag”+“!!!”。

所以......理想的结果是这样的

<p>aaa</p><img src="aaa" >!!!
<p>iii</p><img src="aaa" >!!!
<p>uuu</p><img src="aaa" >!!!
<p>eee</p><img src="aaa" >
<p>ooo</p><img src="aaa" >

但是......实际结果就像

<p>aaa</p><<img src="aaa" >!!!>
<p>iii</p><<img src="aaa" >!!!>
<p>uuu</p><<img src="aaa" >!!!>
<p>eee</p><img src="aaa" >
<p>ooo</p><img src="aaa" >

有一些'&lt;&lt;&lt; &安培; '!!!&GT;'。 我不明白为什么......

做我的主人!感谢。

2 个答案:

答案 0 :(得分:0)

$str = preg_replace('/<img (.*)>/', "<img $1>!!!", $str, $num);

在这里,改为上线。

答案 1 :(得分:0)

您忘记在“$ target”正则表达式上添加分隔符。

试试这个:

define('IMG_REG', '#<img (.*)>#');

$str = '<p>aaa</p><img src="aaa" >
<p>iii</p><img src="aaa" >
<p>uuu</p><img src="aaa" >
<p>eee</p><img src="aaa" >
<p>ooo</p><img src="aaa" >' ;

$num = 3;

if ( preg_match_all(IMG_REG, $str, $m, PREG_OFFSET_CAPTURE) > $num-1 )    
{

    $target = $m[0][$num-1][0];
    $new = $target.'!!!';
    $target = "/".$target."/"; //Delimiters here!!!

    if( $target != NULL ):
       $str = preg_replace( $target, $new, $str, $num);
    endif;

}
echo $str;