我的腳本是用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