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