【问题标题】:$_GET vs $_SERVER['QUERY_STRING'] - encode issue$_GET vs $_SERVER['QUERY_STRING'] - 编码问题
【发布时间】:2015-11-18 18:29:48
【问题描述】:

我正在访问我的脚本抛出一个这样的 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
一个=我

在现实生活中,我期望有很多参数并且需要保存完整的查询,所以 $_SERVER['QUERY_STRING'] 会非常方便。但 charset 似乎无法正常工作,就像 $_GET 函数一样。

有没有办法使用 $_SERVER['QUERY_STRING'] 但使用 $_GET 的字符集获取查询?

【问题讨论】:

  • 如果这是一个编码问题,那么您必须在此处指定相关的编码。我们无法以某种方式猜测。您收到的编码是什么,您在 php 中的编码设置是什么?
  • @arkascha 我是 php 新手,所以我可能不理解您的评论,但我收到的文本没有任何编码(因为它直接来自 url)。我也没有在 php.ini 中定义任何编码设置。我会检查我的服务器的默认编码设置...

标签: javascript php character-encoding chars


【解决方案1】:

问题根本不在于 PHP,而在于 javascript 函数unescape。当我更改为 decodeURIComponent 时,它工作得很好。

【讨论】:

    【解决方案2】:
    $query = http_build_query($_GET);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多