所以我遇到了一个问题,我相信正在发生的事情是我正在接收使用一些unicode空间和一些ascii空间的数据,这样看起来相同的某些字符串并不相同,例如“防水” !=“防水”。这些字符串在我的数据库中显示不同,但是,当存在多字节字符时,通常会看到奇怪的字符:“防水”和“防水”。
我想要一种方法使所有空格都是ascii空格,或者如果更容易,所有空格都是多字节空格。
我尝试过使用preg_replace,但是字符串不再像有效的多字节字符串那样读取了。 (字符串中的多字节字符将显示为垃圾)。
preg_replace('/[\pZ\pC]/',' ',$field);
我也尝试过使用mb_ereg_replace,但它没有效果。
mb_ereg_replace('/[\pZ\pC]/',' ',$field)
答案 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;)。
保存数据时,必须先清理它。用普通空格替换所有不间断空格,用单个替换双空格,最后修剪字符串。