我的脚本是用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);
我不知道这个函数是否会抛出异常。 mb_detect_string的返回值被解释为'检测到的字符编码'或者'如果不能从给定字符串检测到编码'则返回FALSE'。但是如果字符串不是有效的UTF-8,它总是返回'ISO-8859-1'。 – 2013-03-06 12:59:06