不同的Firefox-Chrome在编码变音时


Difference Firefox - Chrome when encoding umlauts

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

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

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

铬:

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

Firefox:

$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;
}

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

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

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