$ _GET vs $ _SERVER ['QUERY_STRING'] - 编码问题

时间:2015-11-18 18:29:49

标签: javascript php character-encoding chars

我正在访问我的脚本,抛出一个像这样的URL

http://www.anydomain.com/code.php?a=ií

code.php 基本上就是这个

<?php header('Content-Type: text/html; charset=utf-8'); ?>
<html><head>
    <meta charset="UTF-8">
</head><body>
<script>
    console.log('<?php echo $_SERVER['QUERY_STRING'];?>');
    console.log(unescape('<?php echo $_SERVER['QUERY_STRING'];?>'));
    console.log('<?php echo $_GET['a'];?>');
</script>
</body></html>

我得到的日志是:

a = i%C3%AD
A = IA
II

在现实生活中,我期待很多参数,需要保存完整的查询,所以 $ _ SERVER ['QUERY_STRING'] 会非常方便。但是charset似乎没有正常工作,就像 $ _ GET 函数一样。

有没有办法使用 $ _ SERVER ['QUERY_STRING'] 来获取查询但使用 $ _ GET 的字符集?

2 个答案:

答案 0 :(得分:1)

问题不在于PHP,而是在javascript函数unescape中。当我改为decodeURIComponent时,它运作得很好。

答案 1 :(得分:0)

$query = http_build_query($_GET);