6

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

我想要一种让所有空格都成为 ascii 空格的方法,或者如果更简单,所有空格都是多字节空格。

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

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

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

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

4 回答 4

9

如果您愿意,可以通过以下方式查找并用标准 ascii 空格替换它们:

$string = str_replace("\xc2\xa0", "\x20", $string);
于 2013-11-22T15:19:24.747 回答
5

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

于 2013-11-20T20:25:12.720 回答
2

我想你正在寻找utf8_decode($field).

于 2013-11-20T19:54:34.663 回答
0

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

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

于 2013-11-20T20:40:34.243 回答