PHP将unicode空间转换为ascii空格

时间:2013-11-20 19:50:23

标签: php unicode mbstring

所以我遇到了一个问题,我相信正在发生的事情是我正在接收使用一些unicode空间和一些ascii空间的数据,这样看起来相同的某些字符串并不相同,例如“防水” !=“防水”。这些字符串在我的数据库中显示不同,但是,当存在多字节字符时,通常会看到奇怪的字符:“防水”和“防水”。

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

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

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

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

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

4 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:4)

看起来preg_replace('/[\pZ\pC]/u',' ',$field);有效(在正则表达式的末尾忘了你)

答案 2 :(得分:2)

我认为你正在寻找utf8_decode($field)

答案 3 :(得分:0)

你称之为 unicode空间的那些空格是不间断的空格(代表什么& nbsp;)。

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