我在显示U + 009A的Unicode字符时遇到问题。
它应该看起来像“š”,但看起来像一个内部带有数字009A的矩形块。
将其转换为实体“š”正确显示字符,但我不想在数据库中存储实体。
网页编码为UTF-8。
该字符的URL编码为“%C2%9A”。
重现: #php -E'echo urldecode(“%C2%9A”);' > / tmp / test;少/ tmp / test
这给了我< U + 009A> in less或< 9A>在vim。
答案 0 :(得分:1)
Unicode字符“š”是U + 0161,而不是U + 009A
我怀疑它是另一个字符集中的0x9A。
当您没有安装带有该字符的字体时,通常会显示带有009A的框。
答案 1 :(得分:0)
如果您使用UTF-8作为输入编码,那么您只需使用普通š
即可。或者您可以使用独立于输入编码的十六进制表示"\xC2\x9A"
(双引号)。或utf8_encode("\x9A")
,因为Unicode和ISO 8859-1的前256个字符是相同的。
答案 2 :(得分:0)
如果我对echo urldecode("%C2%9A");
的输出执行hexdump,我得到c2 9a
,这是字符0x9a的正确UTF-8编码。
您从utf8_encode("\x9A")
当我尝试查看Unicode字符0x9a时,我也得到一个方框 - 怀疑它不是你认为它应该是的字符(Aha:当Azquelt发布时,unicode字符“š”是U + 0161,而不是U + 009A)
答案 3 :(得分:0)
Codeigniter在某些托管服务器(如Etisalat)中具有utf-8字符输入数据保存问题。 system / core / Utf8.php具有检测输入数据(post / get)中的非法char的功能。在某些情况下,utf-8 char被认为是非法的,保存功能将失败。为避免数据保存问题,请在第85行的Utf8.php的clean_string()函数中执行以下操作。
$ str =!mb_detect_encoding($ str,' UTF-8',TRUE)? utf8_encode($ str):$ str;
$ str = @iconv(' UTF-8',' UTF-8 // IGNORE',$ str);