【发布时间】:2015-07-15 12:56:26
【问题描述】:
自从我阅读了有关字符编码的文章以来,我想使用 UTF-8 制作我的所有页面以实现兼容性。但是当我尝试将用户输入转换为 UTF-8 时,我遇到了困难,这适用于所有浏览器,期待 Internet-Explorer(像往常一样)。
我不知道我的代码有什么问题,我觉得很好。
- 我用字符编码设置了标题
- 我将文件保存为 UTF-8(无 BOM)
只有当您尝试通过 Internet-Explorer myscript.php?c=äüöß 上的 $_GET 访问页面时才会发生这种情况 当我在我的网站上写下特殊字符时,它们会正确显示。
这是我的代码:
// User Input
$_GET['c'] = "äüöß"; // Access URL ?c=äüöß
//--------
header("Content-Type: text/html; charset=utf-8");
mb_internal_encoding('UTF-8');
$_GET = userToUtf8($_GET);
function userToUtf8($string) {
if(is_array($string)) {
$tmp = array();
foreach($string as $key => $value) {
$tmp[$key] = userToUtf8($value);
}
return $tmp;
}
return userDataUtf8($string);
}
function userDataUtf8($string) {
print("1: " . mb_detect_encoding($string) . "<br>"); // Shows: 1: UTF-8
$string = mb_convert_encoding($string, 'UTF-8', mb_detect_encoding($string)); // Convert non UTF-8 String to UTF-8
print("2: " . mb_detect_encoding($string) . "<br>"); // Shows: 2: ASCII
$string = preg_replace('/[\xF0-\xF7].../s', '', $string);
print("3: " . mb_detect_encoding($string) . "<br>"); // Shows: 3: ASCII
return $string;
}
echo $_GET['c']; // Shows nothing
echo mb_detect_encoding($_GET['c']); // ASCII
echo "äöü+#"; // Shows "äöü+#"
最令人困惑的部分是,它向我展示了从 UTF-8 转换为 ASCII... 有人能告诉我为什么它没有正确显示特殊字符,这里有什么问题吗?或者这是 Internet-Explorer 上的错误?
编辑: 如果我禁用转换它说,这都是 UTF-8 但字符也不会显示给我......它们显示为“??????”......
注意:这只发生在 Internet-Explorer 中!
【问题讨论】:
-
你用的是什么版本的IE?您通过 GET 检索的三个字符是您需要转换的字符,对吧?
-
没错。我使用版本 IE 11.0.9600。但我希望它可以像在其他浏览器中一样与所有 UTF-8 字符一起使用
-
把IE的编码改成utf8能正常显示吗?
-
这是整个 PHP 文件吗?对于 HTML 内容,您需要将其放在
<html>标记中。对于非 UTF8 浏览器 (IE),您需要在<meta charset>中指定文档的字符集。 -
看来如果c是urlencoded
c=%C3%A4%C3%BC%C3%B6%C3%9F就可以了。
标签: php internet-explorer encoding utf-8