使用 preg_replace 删除空格会在 php 中的字符串中输出无法识别的字符

Removing spaces with preg_replace outputs unrecognized characters in string in php

我想用一个 space 替换多个 space 或   所以我尝试使用 preg_replace 函数

下面的代码

所以它正确地替换了 spaces 但它也在输出字符串中放置了无法识别的字符,

为了演示,我使用了 $string 变量,但实际上它可以是来自服务器端数据库的数据,请参见下面的代码:

<?php 
     $string = "123080345&nbsp;900113760  165604100012";
     echo preg_replace("/(\s|&nbsp;)+/",' ',$string);

     //output: 123080345� 900113760� 165604100012
     //expected output: 123080345 900113760 165604100012

所以我的问题是 为什么 preg_replace 放置无法识别的字符以及如何获得干净清晰的输出,

没有无法识别的字符,正如我在上面的代码中显示的 预期输出

虽然它只是带数字的字符串,spaces&nbsp;

但我认为在数据库中它是 UTF-8 编码字符串 所以当我尝试 preg_replace 它返回无法识别的字符。

所以当我尝试使用 相同的正则表达式和 /u 标识符作为 unicode

时它工作正常

下面是我的解决方案:

<?php 

     $string = "123080345&nbsp;900113760  165604100012";
     echo preg_replace("/(\s|&nbsp;)+/u",' ',$string); //u for unicode characters 

     //output: 123080345 900113760 165604100012

希望对大家有所帮助,谢谢