8

我有一个像

test.php?x=hello+world&y=%00h%00e%00l%00l%00o

当我将它写入文件时

file_put_contents('x.txt', $_GET['x']); // -->hello world
file_put_contents('y.txt', $_GET['y']); // -->\0h\0e\0l\0l\0o 

但我需要在不编码的情况下将其写入

file_put_contents('x.txt', ????); // -->hello+world
file_put_contents('y.txt', ????); // -->%00h%00e%00l%00l%00o

我能怎么做?

谢谢

4

3 回答 3

6

您可以从 $_SERVER["QUERY_STRING"] 变量中获取未编码的值。

function getNonDecodedParameters() {
  $a = array();
  foreach (explode ("&", $_SERVER["QUERY_STRING"]) as $q) {
    $p = explode ('=', $q, 2);
    $a[$p[0]] = isset ($p[1]) ? $p[1] : '';
  }
  return $a;
}

$input = getNonDecodedParameters();
file_put_contents('x.txt', $input['x']); 
于 2015-03-18T13:03:37.513 回答
5

因为 The$_GET$_REQUESTsuperglobals 会自动通过解码函数(相当于urldecode())运行,所以您只需重新urlencode()数据以使其与 URL 字符串中传递的字符匹配:

file_put_contents('x.txt', urlencode($_GET['x'])); // -->hello+world
file_put_contents('y.txt', urlencode($_GET['y'])); // -->%00h%00e%00l%00l%00o

我已经在本地对此进行了测试,并且运行良好。但是,根据您的评论,您可能还想查看您的编码设置。如果结果urlencode($_GET['y'])是,那么您传入的 ( )%5C0h%5C0e%5C0l%5C0l%5C0o似乎被解释为文字字符串(如连接到字符的字符),而不是正确地解释为单个空字符。null character%00"\0"\0\0

您应该查看有关字符串编码和 ASCII 设备控制字符的 PHP 文档

于 2013-03-21T05:26:28.417 回答
0

我认为您可以使用urlencode()在 URL 中传递值并urldecode()获取值。

于 2013-03-21T05:28:00.680 回答