U + 009A的PHP UTF-8编码问题

时间:2009-07-16 10:29:17

标签: php encoding utf-8

我在显示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。

4 个答案:

答案 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);