【问题标题】:php urldecode utf8 encoding questionphp urldecode utf8 编码问题
【发布时间】:2011-07-14 00:32:16
【问题描述】:

标签: php encoding url-encoding


【解决方案1】:

答案是您无法确定这一点,因为它可能会因请求而异,特别是如果它并非总是从表单提交,而是有时使用 ajax 发送,或者由用户直接在地址栏中键入。

我使用的是波兰语应用程序。该应用程序使用 ISO-8859-2 代码页,并且所有 html 输出都以这种编码方式提供。

应用程序接收两种不同编码的请求,具体取决于请求的上下文:

  1. 如果请求是表单提交的结果,则编码与提交表单的html页面相同。我认为它可以用表单元素的accept-charset属性来改变,但我没有尝试过。
  2. 如果请求是使用 Ajax 发出的,那么它始终是 UTF-8(至少在 Chrome 和 Firefox 中,因为我们的客户端只使用这些浏览器)。
  3. 如果请求是手动输入到 URL 中的,那么它通常是 UTF-8,但如果它是书签或类似的东西,那么它可能是其他编码(取决于书签的创建方式)。

所以,真的没有办法确定。如果可以,请始终使用 UTF-8。否则使用字符集检测(检查它是否是 UTF-8,如果不是,则根据您的应用程序使用的语言回退到最可能的编码)。

我使用以下代码:

<?php
$t = 'zażółć gęślą jaźń';
echo mb_detect_encoding($t, 'UTF-8,ISO-8859-2');

最好的问候, 斯威尔克

【讨论】:

  • 看看这个:) var_dump(mb_detect_encoding($_GET['q'])); // string(5) "UTF-8" var_dump(mb_detect_encoding($_GET['q'], "UTF-8")); // string(5) "UTF-8" var_dump(mb_detect_encoding($_GET['q'], "UTF-8, windows-1251")); // string(12) "Windows-1251" var_dump(mb_detect_encoding($_GET['q'], "UTF-8, windows-1251, windows-1252")); // string(12) "Windows-1251"
【解决方案2】:

这不是 apache 也不是 mod_php 问题。 PHP 会自动对 urlencoding 进行解码,但它不会对任何内容进行编码,因此无需担心

从这里看来

在 Firefox3 example.com/?action=search&q=автомобиль 中输入时,它会自动转换为:example.com/?action=search&q=%E0%E2%F2%EE%EC%EE%E1%E8%EB% FC

这更像是浏览器或操作系统的问题。

您的操作系统编码似乎是单字节的,而浏览器确实对您的单字节字符串进行了 urlencode。

【讨论】:

    【解决方案3】:

    您应该保留 UTF8 并使用适当的内容类型标头将页面的字符集设置为 UTF8:

    header('Content-type: text/html; charset=utf-8');
    

    【讨论】:

      【解决方案4】:

      当您直接在 URL 搜索栏中键入非 ASCII 字符时,浏览器似乎会自动将字符转换为 UTF-8 和 URL 编码实体。我没有这方面的硬数据,但这种行为是有道理的。相关问题在这里:Unicode characters in URLs

      您的页面使用windows-1252 或其他单字节字符集作为其输出编码,这就是您需要先转换字符数据的原因。

      您可以将页面的输出编码更改为 UTF-8 以节省该步骤,但这可能会产生其他后果(例如需要使用多字节字符串函数和/或数据库输出的不同编码等)

      【讨论】:

        【解决方案5】:

        windows-1251 是一种 8 位字符编码,旨在涵盖使用西里尔字母的语言。 Wiki

        您可能已在网页中将字符集设置为 windows-1251

        【讨论】:

          【解决方案6】:

          我也遇到过这个问题。我用adobe dreameweaver cs4(非英文版)

          我解决如下:

          1. 在 PHP 页面文件的顶部添加 header('Content-type: text/html; charset=utf-8');

          2. 重要adobe dreameweaver中,你应该从top menuModify (M) -&gt; Page Properties (P)修改Page Properties,选择Title/coding并将unicode修改为unicode (uft-8)

          (对不起,这些菜单词被翻译成英文,可能不是真正的词)

          【讨论】:

            猜你喜欢
            • 2013-03-02
            • 1970-01-01
            • 2013-06-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多