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

时间:2015-11-15 11:11:05

标签: php regex

我遇到一个特殊字符§的问题。我想用单§替换多次出现的§。以下正则表达式适用于Regex 101

$file_data = file_get_contents($file_name);
$file_data = preg_replace('/\§+/g', '§',$file_data);

改变了

  

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

  

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

但是,我上传它后,它无法在服务器上运行。这是PHP的var_dump($file_data)

  

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

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

2 个答案:

答案 0 :(得分:2)

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

来自perlre文档:

  

<强> / U   表示在模式匹配时使用Unicode规则。在ASCII平台上,这意味着128到255之间的代码点采用其Latin-1(ISO-8859-1)含义(与Unicode&#39; s相同)....

$output = preg_replace('/§+/u', '§', $input);
                         // ^ 

答案 1 :(得分:0)

$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 .... 
*/