duansao6776 2016-03-29 07:24
浏览 25
已采纳

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

I'm making function to replace specific img tag with PHP. But... not doing well so far.

code is below

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;

I want to change first 3 "img tag" to "img tag" + "!!!".

So... ideal result is like this

<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" >

But... actual result is like

<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" >

There are some '<<' & '!!!>'. I can't tell why...

Be my Master! Thanks.

  • 写回答

2条回答 默认 最新

  • douzhi0107 2016-03-29 12:57
    关注

    You forgot to add the delimiters on the "$target" regex.

    Try this:

    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;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c