PHP将unicode空间转换为ascii空间


PHP convert unicode spaces to ascii spaces

所以我遇到了一个问题,我认为发生的事情是我接收到的数据使用了一些unicode空间和一些ascii空间,因此某些看起来相同的字符串是不等价的,例如"防水"!="防水"。然而,这些字符串在我的数据库中出现的方式不同,当有多字节字符时,你通常会看到一些奇怪的字符:"防水"answers"防水"。

我想要一种方法,使所有的空间都是ascii空间,或者如果更容易的话,所有的空间是多字节空间。

我尝试过使用preg_replace,但字符串的读取方式不再像有效的多字节字符串。(字符串中的多字节字符将显示为垃圾)。

preg_replace('/['pZ'pC]/',' ',$field);

我也尝试过使用mb_ereg_replace,但没有效果。

mb_ereg_replace('/['pZ'pC]/',' ',$field)

如果需要,您可以通过:找到并用标准ascii空格替换它们

$string = str_replace("'xc2'xa0", "'x20", $string);

看起来preg_replace('/['pZ'pC]/u',' ',$field);可以工作(忘记了正则表达式末尾的u)

我想您正在寻找utf8_decode($field)

那些称为unicode空间的空间是非中断空间(代表什么)。

保存数据时,必须先清理数据。用普通空格替换所有不间断空格,用单个空格替换双空格,最后修剪字符串。