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的&安培;行动=创建&安培;短语=යුනිකෝඩ්
答案 0 :(得分:5)
实际值实际上“%E0%B6%BA%E0%B7%94%E0 ......”!
网址必须包含ASCII的子集,不能包含其他“Unicode字符”。您的浏览器可能非常好,可以让您输入任意Unicode字符并实际将它们显示为字符,但在幕后,URL值为百分比编码。您必须使用rawurldecode
对其进行解码。
查询字符串由PHP自动解析和解码,并放在$_GET
数组中(和$_POST
请求体)。但是您必须自己解析和解码的原始查询字符串。
答案 1 :(得分:0)
使用特殊字符对值进行编码。
$token = "a{l@3a3s9a";
rawurlencode($token); //The coding would be "%7Bl%403a3s9a"
将编码后的值发送到数据库
通过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()
使用通过URL("a{l@3a3s9a"
)获得的值
此编码将用于通过URL段获取特殊字符。
GL