【问题标题】:Difference Firefox - Chrome when encoding umlauts编码变音符号时的差异 Firefox - Chrome
【发布时间】:2012-04-02 10:57:32
【问题描述】:

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

【问题讨论】:

    标签: php firefox google-chrome diacritics urldecode


    【解决方案1】:

    正如 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;
    }
    

    【讨论】:

    • 谢谢你,成功了。但是这些不同的浏览器行为很糟糕-.-
    • 是的,我真的很惊讶 Firefox 在这里仍然坚持使用 Latin-1。
    • @Niko Firefox 实际上默认使用取决于用户区域设置的编码。事实证明,Chrome 所做的事情会破坏美国以外的许多网站......
    【解决方案2】:

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

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

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

    【讨论】:

    • 我已经尝试通过发送带有 PHP 的 Header 并使用 html 元标记来强制使用 UTF-8,但没有任何效果。顺便说一句,它不是一个表单,只是一个普通的 get 参数 ?text=aöüß
    • ?text=aöüß 未进行 urlencoded。要在 javascript 中编码,您需要 encodeURIcomponent,以保留编码。要在 PHP 中编码,您可以使用 rawurlencode。如果你 rawurldecode 一个项目,我不知道你是否需要 rawurldecode ..
    • 将 ?text=aöüß 添加到 Firefox 中的页面,您会看到它会自动将其编码为 a%F6%FC%DF
    • 这里没有这样做(stackoverflow)......而且这个页面是utf-8。在 Win7Pro 上使用 FF11 测试
    猜你喜欢
    • 2018-02-01
    • 2012-01-31
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    相关资源
    最近更新 更多