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

Ste*_*fan 6 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不起作用.有谁知道如何处理?谢谢.

Nik*_*iko 5

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

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

铬:

$text = urldecode($_GET['text']);
Run Code Online (Sandbox Code Playgroud)

火狐:

$text = utf8_encode(urldecode($_GET['text']));
Run Code Online (Sandbox Code Playgroud)

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

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

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

    return $decoded;
}
Run Code Online (Sandbox Code Playgroud)