PHP:错误的 HTML 替换为 preg_replace。
PHP: Wrong HTML replacement with 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" >
有一些“<<”和“!!!>”。
我说不出为什么...
做我的主人!谢谢。
$str = preg_replace('/<img (.*)>/', "<img >!!!", $str, $num);
这里,换上一行。
您忘记在“$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;
我正在制作用 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" >
有一些“<<”和“!!!>”。 我说不出为什么...
做我的主人!谢谢。
$str = preg_replace('/<img (.*)>/', "<img >!!!", $str, $num);
这里,换上一行。
您忘记在“$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;