$ _SERVER [' QUERY_STRING']不会打印unicode值,因为它是

时间:2014-10-09 08:04:38

标签: php unicode

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

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

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

实际结果:

යුනිකෝඩ්

规则= unicode的&安培;行动=创建&安培;短语=%E0%B6%BA%E0%B7%94%E0%B6%B1%E0%B7%92%E0%B6%9A%E0%B7%9D% E0%B6%A9%E0%B7%8A

我的期望

යුනිකෝඩ්

规则= unicode的&安培;行动=创建&安培;短语=යුනිකෝඩ්

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:0)

  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