【问题标题】:$_SERVER['QUERY_STRING'] does not print unicode values as it is$_SERVER['QUERY_STRING'] 不会按原样打印 unicode 值
【发布时间】:2014-10-09 08:04:38
【问题描述】:

http://localhost/fw/api/fw_api.php?rule=unicode&action=create&phrase=යුනිකෝඩ්

我访问上述网址。在fw_api.php 中,当我回显$_SERVER['QUERY_STRING'] 时,它并没有像URL 中那样给出我的Unicode 短语值“යුනිකෝඩ්”的实际值。有什么解决办法吗?或者我在这里做/期待有什么问题?需要帮助。

header ('Content-type: text/html; charset=utf-8');
echo $_GET['phrase'];
echo $_SERVER['QUERY_STRING'];
die;

实际结果:

යුනිකෝඩ්

rule=unicode&action=create&phrase=%E0%B6%BA%E0%B7%94%E0%B6%B1%E0%B7%92%E0%B6%9A%E0%B7%9D%E0%B6% A9%E0%B7%8A

我的预期

යුනිකෝඩ්

rule=unicode&action=create&phrase=යුනිකෝඩ්

【问题讨论】:

    标签: php unicode


    【解决方案1】:

    实际值是实际上“%E0%B6%BA%E0%B7%94%E0...”!

    URL 必须由 ASCII 的子集组成,它们不能包含其他“Unicode 字符”。您的浏览器可能非常好,可以让您输入任意 Unicode 字符并将它们实际显示为字符,但在幕后 URL 值是百分比编码。您必须使用rawurldecode 对其进行解码。

    查询字符串由 PHP 自动解析和解码,并放置在 $_GET 数组中(以及请求正文的 $_POST)。但是您必须自己解析和解码原始查询字符串。

    【讨论】:

    • "rawurldecode" 解决了我的问题。我也明白你的意思。非常感谢。
    • 魅力十足!
    【解决方案2】:
    1. 用特殊字符编码一个值。

      $token = "a{l@3a3s9a";
      rawurlencode($token);   //The coding would be "%7Bl%403a3s9a"
      
    2. 将编码值发送到数据库

    3. 通过URL接收参数值

      $body = file_get_contents("php://input");
      if ($body == null && isset($_SERVER['QUERY_STRING'])) {
          parse_str($_SERVER['QUERY_STRING'], $this->parameters);
          return;
      }
      

      参数值使用parse_str ()自动解码,无需使用rawurldecode()

    4. 使用URL获取的值("a{l@3a3s9a")

    此编码将用于通过 URL 段获取特殊字符。

    GL

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多