preg_replace()是否会更改我的字符集?

Dav*_*sen 7 php regex encoding character-encoding special-characters

我有以下代码似乎正在改变我的字符集.

     $html = "à";
     echo $html;  // result: à
     $html = preg_replace("/\s/", "", $html);
     echo $html;  // result: ?
Run Code Online (Sandbox Code Playgroud)

但是,当我[\t\n\r\f\v]用作我的模式而不是特殊字符时,\s它可以正常工作:

     $html = "à";
     echo $html;  // result: à
     $html = preg_replace("/[\t\n\r\f\v]/", "", $html);
     echo $html;  // result: à
Run Code Online (Sandbox Code Playgroud)

这是为什么?

Fab*_* Sa 11

我也有同样的问题.这是因为UTF8.

à0xc3a0UTF8.在PHP中,您可以这样写:"\xc3\xa0".

使用PCRE /s匹配0xa0就像是ASCII"非破坏空间".

您可以使用该u标志来解决问题.

$html = preg_replace("/\s/u", "", $html);
Run Code Online (Sandbox Code Playgroud)