2012-01-31 46 views
0

是否有可能检测到用户的字符串的字符集?PHP - 检测用户提供的字符的字符集

如果没有,何谈下一个问题..

是否有可靠内置PHP函数,可以准确地告诉我们,如果用户提供的字符串(无论是提供直通GET/POST /饼干等),是否在UTF-8或不?换句话说,我可以这样做

is_utf8($ _ GET [ 'FIRST_NAME'])

反正是有这个功能可能会产生一个TRUE其中,在现实中FIRST_NAME在UTF-8是不是?

+0

请upvote并接受你以前的问题的答案(这也是)。请参阅http://stackoverflow.com/faq#reputation。 – deceze 2012-01-31 04:03:06

回答

1

关于1:

你可以给mb_detect_encoding一试,但它几乎是在黑暗中拍摄。 “编码”字符串只是一堆字节。这种字节序列在许多不同的编码中通常同样有效。因此,根据定义,不可能检测到未知编码可靠,你只能猜测。由于这个原因,存在元信息,例如应该传送传输内容的编码的HTTP标题。检查这些是否可用。

关于2:

mb_check_encoding($var, 'UTF-8')会告诉你该字符串是否是一个合法的UTF-8字符串。据我所见,在PHP的最新版本中,它完成了它所说的任务。这仍然不意味着字符串必然是一个UTF-8字符串,它只是意味着字节序列的顺序在UTF-8中是有效的。

+0

假设传入的字符串在utf-8中并对其进行解码,那么该怎么办?如果结果相符,我们可以有把握地得出结论:假设是正确的,它的行为是用utf-8编码的?所以在PHP中,如果我做了以下事情,它返回TRUE,那么这将是验证它是否为UTF-8的好方法吗? if($ _GET ['name'] == utf8_decode($ _ GET ['name']) – 2012-01-31 15:23:28

+0

@John不,这是废话。 – deceze 2012-01-31 22:43:18

+0

我们是否说PHP世界中没有任何东西,因为我们今天的立场是验证用户输入是否在utf-8中?我如何确保我可以正确地为当前用户strig逃脱/消毒?我的逃生/消毒过滤器都是为处理utf-8而设计的。 – 2012-02-01 02:08:09