\uc2a0与u0020空格导致的问题

\uc2a0与u0020空格导致的问题

今天发现一个问题,同样表面上看上去是空格,但是unicode之后,一个是\uc2a0,一个是\u0020,两个显示的都是空格,但是编码文字却不一样

\u0031\u0030\u79cd\u57fa\u4e8e\uc2a0\u0057\u0065\u0062\u0052\u0054\u0043\uc2a0\u7684\u006a\u0073\u793a\u4f8b\u63d2\u4ef6\uff0c\u5305\u62ec\u6587\u4ef6\u5171\u4eab\u3001\u89c6\u9891\u4f1a\u8bae\u3001\u5171\u4eab\u753b\u677f\u7b49
10种基于 WebRTC 的js示例插件,包括文件共享、视频会议、共享画板等
\u0031\u0030\u79cd\u57fa\u4e8e\u0020\u0057\u0065\u0062\u0052\u0054\u0043\u0020\u7684\u006a\u0073\u793a\u4f8b\u63d2\u4ef6\uff0c\u5305\u62ec\u6587\u4ef6\u5171\u4eab\u3001\u89c6\u9891\u4f1a\u8bae\u3001\u5171\u4eab\u753b\u677f\u7b49
10种基于 WebRTC 的js示例插件,包括文件共享、视频会议、共享画板等

解释一下uc2a0,他是UTF-8 NO-BREAK SPACE

在UTF-8编码里面存在一个特殊的字符,其编码是“0xC2 0xA0”,转换成字符的时候表现为一个半角空格,跟一般的半角空格(ASCII 0x20)不同的是它的宽度不会被压缩,所以排版中常能用到它。但是GB2312、Unicode之类并没有这样的字符

由于编码不一样,可能会导致与数据库匹配对比的时候出错,看似都是空格,就是不会相等,其实他们不一样,解决办法很简单,替换掉

<?php
$str = "含uc2a0的字符串";
$_tempstr = rawurlencode($str);
$_tempstr = str_replace("%C2%A0", "%20", $_tempstr);
$str = rawurldecode($_tempstr);
echo $str;
?>




{{collectdata}}

网友评论0