系统使用了TinyMCE,最近修改了前端的一个功能,即在提交前,取出TinyMCE编辑器中的内容,使用Ajax方式传入后台,修改内容,再传回前台填入TincyMCE编辑器中。测试时发现内容传回前台后,会经常在有些地方多个“?”号,感觉是内容在传入后台、传回前台时发生了乱码问题,但排查了一下,系统的编码并没有问题,后来再排查并通过从网上查找资料,找到了原因。

原因是在向TinyMCE编辑器中填入内容时,直接拷贝了一段网页上的内容,而这段内容中包含空格符号“ ”,填入内容后,这个字符为\u00A0,在使用Ajax将内容传回后台时,对这段内容按照UTF-8作URL编码,而这个符号被编码成%C2%A0,在后台解码时,由于后台程序为GBK编码,而\u00A0已经超出了GBK的编码范围,所以解码后这个字符就变为了“?”号。

既然\u00A0在后台不能正常表示,为什么系统之前没有出现“?”号的问题呢?原因是当表单向后台提交内容时,浏览器会自动对\u00A0这个字符进行转化处理,IE浏览器会自动转化为“ ”,FireFox浏览器会自动转化为“ ”。