Php 您如何知道用户正在向浏览器输入什么编码?

Php 您如何知道用户正在向浏览器输入什么编码?,php,html,encoding,utf-8,Php,Html,Encoding,Utf 8,我阅读,所以我接受了他的建议,在我的网页和数据库中使用UTF-8。我不明白的是如何处理用户输入。正如Joel所说,“在不知道字符串使用什么编码的情况下使用字符串是没有意义的。”但是我如何知道用户输入字符串使用什么编码呢?如果我有 在我的页面上,我如何知道我从用户那里得到了什么编码?如果用户输入一些特殊的ASCII符号,比如♣ 或™ 还是什么?是否有某种方法可以检测到用户输入给了我UTF-8中无法识别的东西?对于如何处理这类事情,是否有一些标准?检查以发现字符编码。检查以发现字符编码。如果您的网

我阅读,所以我接受了他的建议,在我的网页和数据库中使用UTF-8。我不明白的是如何处理用户输入。正如Joel所说,“在不知道字符串使用什么编码的情况下使用字符串是没有意义的。”但是我如何知道用户输入字符串使用什么编码呢?如果我有


在我的页面上,我如何知道我从用户那里得到了什么编码?如果用户输入一些特殊的ASCII符号,比如♣ 或™ 还是什么?是否有某种方法可以检测到用户输入给了我UTF-8中无法识别的东西?对于如何处理这类事情,是否有一些标准?

检查以发现字符编码。

检查以发现字符编码。

如果您的网页使用UTF-8,浏览器将为您转换为UTF-8。因此,即使特殊字符是ASCII码,它也将作为UTF-8提交

但是,如果用户将页面编码切换回ISO-8859-*,您永远不会知道用户的“瘙痒之手”

您可以在上使用,但不是100%防弹

/* Detect character encoding with current detect_order */
echo mb_detect_encoding($str);

/* "auto" is expanded to "ASCII,JIS,UTF-8,EUC-JP,SJIS" */
echo mb_detect_encoding($str, "auto");

/* Specify encoding_list character encoding by comma separated list */
echo mb_detect_encoding($str, "JIS, eucjp-win, sjis-win");

/* Use array to specify encoding_list  */
$ary[] = "ASCII";
$ary[] = "JIS";
$ary[] = "EUC-JP";
echo mb_detect_encoding($str, $ary);

如果您的网页使用UTF-8,浏览器将为您转换为UTF-8。因此,即使特殊字符是ASCII码,它也将作为UTF-8提交

但是,如果用户将页面编码切换回ISO-8859-*,您永远不会知道用户的“瘙痒之手”

您可以在上使用,但不是100%防弹

/* Detect character encoding with current detect_order */
echo mb_detect_encoding($str);

/* "auto" is expanded to "ASCII,JIS,UTF-8,EUC-JP,SJIS" */
echo mb_detect_encoding($str, "auto");

/* Specify encoding_list character encoding by comma separated list */
echo mb_detect_encoding($str, "JIS, eucjp-win, sjis-win");

/* Use array to specify encoding_list  */
$ary[] = "ASCII";
$ary[] = "JIS";
$ary[] = "EUC-JP";
echo mb_detect_encoding($str, $ary);

不要尝试在应用程序中检测、转换所有用户输入的文本为UTF-8。您可以尽您所能,将Web服务器配置为发送UTF-8页面和UTF-8头,将应用程序配置为处理UTF-8中的所有文本,调整文件系统(如有必要)以将文本文件处理为UTF-8,配置数据库,但您对用户端没有真正的控制权。您可以建议在html表单中使用正确的字符编码,如以下所示,但这在用户端并不真正可行:

<form action="/index.php" method="post" accept-charset="UTF-8"></form>


除非检测用户输入的编码是应用程序的全部目的,否则这是一个愚蠢的尝试。假设编码错误,并在应用程序中将其转换为UTF-8。正如您应该假设您的用户输入是恶意的一样,在尝试将其插入数据库之前,请先将其清除


在大多数正确实现了UTF-8的语言中,ASCII字符在转换后仍然有效,因此也不用担心。

不要尝试检测,将应用程序中所有用户输入的文本转换为UTF-8。您可以尽您所能,将Web服务器配置为发送UTF-8页面和UTF-8头,将应用程序配置为处理UTF-8中的所有文本,调整文件系统(如有必要)以将文本文件处理为UTF-8,配置数据库,但您对用户端没有真正的控制权。您可以建议在html表单中使用正确的字符编码,如以下所示,但这在用户端并不真正可行:

<form action="/index.php" method="post" accept-charset="UTF-8"></form>


除非检测用户输入的编码是应用程序的全部目的,否则这是一个愚蠢的尝试。假设编码错误,并在应用程序中将其转换为UTF-8。正如您应该假设您的用户输入是恶意的一样,在尝试将其插入数据库之前,请先将其清除


在大多数正确实现了UTF-8的语言中,ASCII字符将在转换后仍然有效,因此也不用担心这一点。

ASCII没有特殊符号,如♣ 或™. 它只有128个字符,其中一些是控制字符。UTF-8有这些符号。ASCII没有特殊符号,如♣ 或™. 它只有128个字符,其中一些是控制字符。有这些符号的是UTF-8。“假设编码错误,并在应用程序中将其转换为UTF-8。”但你不能从“错误”转换为UTF-8,你必须从其他特定编码转换为UTF-8。所以,如果你的页面是用UTF-8提供的,而你没有得到UTF-8,那么如果你不想做完整的编码检查,你可能做不了很多,甚至那些都不是100%保证。我不明白你对我的评论有什么问题,因为你基本上是在说我说的话。你是正确的,你不能绝对肯定地知道一个随机用户的输入将被编码成什么。但在将用户输入插入数据库时,编码实际上是最简单的问题。您真正能做的就是将其转换为UTF-8,并希望一切顺利,因为您有潜在的SQL注入代码要清理,还有其他更重要的事情要做。此外,由于这不是1996年,大多数浏览器和操作系统都支持UTF-8编码,所以这完全是学术性的。所以我不得不接受这样一个事实,即如果有人提交了非UTF-8的内容,就会出现乱码文本?几乎是的。除非你想让自己发疯,试图找到一种方法来检查每一篇文章的编码是否100%准确。但互联网的本质是:高度容忍失败。“假设编码错误,并在应用程序中将其转换为UTF-8。”但你不能从“错误”转换为UTF-8,你必须从其他特定编码转换为UTF-8。所以,如果你的页面是用UTF-8提供的,而你没有得到UTF-8,那么如果你不想做完整的编码检查,你可能做不了很多,甚至那些都不是100%保证。我不明白你对我的评论有什么问题,因为你基本上是在说我说的话。你是正确的,你不能绝对肯定地知道一个随机用户的输入将被编码成什么。但在将用户输入插入数据库时,编码实际上是最简单的问题。您真正能做的就是将其转换为UTF-8,并希望一切顺利,因为您有潜在的SQL注入代码要清理,还有其他更重要的事情要做。而且,由于这不是1996年,大多数浏览器和操作系统都支持UTF-8编码,所以这都是学术性的