将用户输入转换为UTF-8的最佳方法

时间:2012-07-26 14:21:02

标签: php character-encoding

我正在构建一个PHP Web应用程序,它可以在UTF-8中运行。数据库是UTF-8,页面用作UTF-8,我使用元标记将字符集设置为UTF-8。当然,与用户使用Internet Explorer,以及复制&从Microsoft Office粘贴,我不知何故设法偶尔得不到UTF-8输入。

理想的解决方案是抛出HTTP 400 Bad Request错误,但显然我不能这样做。接下来最好的事情是将$_GET$_POST$_REQUEST转换为UTF-8。反正有没有看到输入的字符编码是什么,所以我可以把它传递给iconv?如果没有,那么这样做的最佳解决方案是什么?

2 个答案:

答案 0 :(得分:8)

结帐mb_detect_encoding()示例:

$utf8 = iconv(mb_detect_encoding($input), 'UTF-8', $input);

还有utf8_encode() ,如果,您可以保证字符串输入为ISO-8859-1。

答案 1 :(得分:0)

在某些情况下,只使用utf8_encode或一般检查即可,但您可能会丢失字符串中的某些字符。如果你可以基于各种类型构建一个基本的数组/字符串列表,这个例子是windows,你可以挽救更多。

if(!mb_detect_encoding($fileContents, "UTF-8", true)){
    $checkArr = array("windows-1252", "windows-1251");
    $encodeString = '';
    foreach($checkArr as $encode){
        if(mb_check_encoding($fileContents, $encode)){
            $encodeString .= $encode.",";
        }
    }
    $encodeString = substr($encodeString, 0, -1);
    $fileContents = mb_convert_encoding($fileContents, "UTF-8", $encodeString);
}