9

我正在构建一个 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?如果没有,这样做的最佳解决方案是什么?

4

2 回答 2

8

查看mb_detect_encoding() 示例:

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

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

于 2012-07-26T14:28:32.497 回答
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);
}
于 2013-12-09T22:00:56.970 回答