正则表达式替换PHP中的特殊字符?

正则表达式替换PHP中的特殊字符?,php,regex,Php,Regex,我有一个特殊字符的问题§。我想用单个§替换多次出现的§。下面的正则表达式在上运行良好 它变了 §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ 很难让孩子们编写代码。直到最近,这主要是 到 §这款免费3D机器人游戏可以重新定义孩子们如何学习编码数字趋势 很难让孩子们编写代码。直到最近,这主要是 但是,在我上传后,它在服务器上不工作。下面是PHP提供的var\u dump($file\u data) §§§§§§§§§ 这个免费的3D机器人游戏可以重新定义孩子们如何学习

我有一个特殊字符的问题
§
。我想用单个
§
替换多次出现的
§
。下面的正则表达式在上运行良好

它变了

§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ 很难让孩子们编写代码。直到最近,这主要是

§这款免费3D机器人游戏可以重新定义孩子们如何学习编码数字趋势 很难让孩子们编写代码。直到最近,这主要是

但是,在我上传后,它在服务器上不工作。下面是PHP提供的
var\u dump($file\u data)

§§§§§§§§§ 这个免费的3D机器人游戏可以重新定义孩子们如何学习编码数字趋势 很难让孩子们编写代码。直到最近,这主要是


因此,在
var_dump
中的每个
§
之前似乎都有一个额外的字符
。当作为HTML进行回显时,网页上不会显示额外的字符
。它只是在普通PHP
var\u dump
期间显示。如何在PHP中使用正则表达式替换多次出现的
§

您需要设置
u
(utf-8)修饰符:

$str="§§§§§§§§§This free 3D robot game could redefine how kids learn to codeDigital Trends It's hard to get kids to code. Up until very recently, it was largely ....";
$pttn='@\§{2,}@um';
echo preg_replace( $pttn,'§',$str );

/* will output */
/*
   §This free 3D robot game could redefine how kids learn to codeDigital Trends It's hard to get kids to code. Up until very recently, it was largely .... 
*/
从perlre文件:

/u 表示在模式匹配时使用Unicode规则。在ASCII平台上,这意味着128到255之间的代码点具有拉丁语-1(ISO-8859-1)含义(与Unicode相同)


我将首先删除
g
修饰符,因为它在php正则表达式中不存在。我的第一个猜测是尝试
u
修饰符:
/§+/u
。再次猜测:确保在html文档中使用utf-8,或者事先发送一个标题来定义类型:
header('Content-type:text/html;charset=utf-8')@HamZa谢谢你。它在regex101上工作,所以我认为它在服务器上也可以工作。我想看看它是否能解决问题。@HamZa该文档是一个包含HTML内容的
.dat
文件。@HamZa它正在工作。你说的关于使用
u
的话是正确的。如果你写下来作为答复,我会接受的。否则,我将接受另一个答案,它符合你的评论。
$str="§§§§§§§§§This free 3D robot game could redefine how kids learn to codeDigital Trends It's hard to get kids to code. Up until very recently, it was largely ....";
$pttn='@\§{2,}@um';
echo preg_replace( $pttn,'§',$str );

/* will output */
/*
   §This free 3D robot game could redefine how kids learn to codeDigital Trends It's hard to get kids to code. Up until very recently, it was largely .... 
*/
$output = preg_replace('/§+/u', '§', $input);
                         // ^