差异Firefox - Chrome编码变音符号时

时间:2012-04-02 10:57:32

标签: php firefox google-chrome diacritics urldecode

Chrome会将此转换为aöüß%C3%A4%C3%B6%C3%BC%C3%9F 但是Firefox在这里把它变成了这个奇怪的东西:a%F6%FC%DF 我似乎无法找到一种方法将Firefox的东西转换回PHP中的原始东西。 遗憾的是,Urldecode和rawurldecode不起作用。有谁知道如何处理?感谢。

2 个答案:

答案 0 :(得分:5)

正如Tei已经猜到的那样:Chrome使用UTF-8(可能推荐)用于URL参数,而Firefox使用Latin-1。我不认为你可以控制这种行为。此外,这将很难处理,因为您几乎需要猜测所使用的编码。

这就是解码的工作方式(取决于浏览器,假设您在应用程序中使用UTF-8):

铬:

$text = urldecode($_GET['text']);

火狐:

$text = utf8_encode(urldecode($_GET['text']));

这可能是一种适用于大多数情况的解决方案:

function urldecode_utf8($text) {
    $decoded = urldecode($text);

    if (!mb_check_encoding($decoded, 'UTF-8')) {
        $decoded = utf8_encode($decoded);
    }

    return $decoded;
}

答案 1 :(得分:1)

强制您的网页使用UTF-8。这些代码可能是不同的编码变音符号。一个是像Latin1,另一个可能是UTF-8。

强制utf-8的最佳方法是在html的元标记中。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />