我的脚本是用 UTF-8 编写的,它使用的 MySQL 数据库表的排序规则是 utf8_unicode_ci。现在,如果我想将 $_GET
/$_POST
中的字符串与脚本/数据库中的“内部”字符串进行比较,甚至将某些内容放入数据库中,我是否必须检查/修复变量的编码还是 PHP 已经为我做了?
如果是前者,我是否可以在脚本开头简单地执行以下操作?
function inputToUtf8($string) {
$detectedEncoding = mb_detect_encoding($string, 'UTF-8,ISO-8859-1', true);
if ($detectedEncoding == 'UTF-8') {
return $string;
} elseif ($detectedEncoding == 'ISO-8859-1') {
return utf8_encode($string);
}
throw new Exception('Invalid character encoding detected.');
}
foreach ($_GET as &$v) $v = inputToUtf8($v); unset($v);
foreach ($_POST as &$v) $v = inputToUtf8($v); unset($v);
最佳答案
PHP 不会为您做这些,但客户端浏览器通常会做。以您的 HTML 页面所采用的编码发送 GET/POST 数据是正常的,因此如果您为 HTML 页面正确指定了字符编码,浏览器应该并且通常也会使用相同的字符编码。
当然,确定比假设更好 - 至少在您需要确定的情况下。
编辑:为了明确这一点 - 确保我的意思是过滤掉与您期望的字符集不匹配的字符。您应该一次只设置、期望和支持一个字符集。
关于php - PHP 会处理 $_GET 和 $_POST 中变量的字符编码吗? (PHP 5.4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15211069/