6

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

4

2 回答 2

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;
}
于 2012-04-02T11:28:25.563 回答
1

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

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

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
于 2012-04-02T11:07:20.863 回答