微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

让PHP停止替换“” $ _GET或$ _POST数组中的字符?

如何解决让PHP停止替换“” $ _GET或$ _POST数组中的字符?

这是PHP.net对其执行原因的解释:

传入变量名称中的点

通常,当将变量传递到脚本中时,PHP不会更改变量的名称。但是,应注意,点(句点,句号)不是PHP变量名称中的有效字符。由于这个原因,请看一下:

<?PHP
$varname.ext;  /* invalid variable name */
?>

现在,解析器看到的是一个名为$ varname的变量,其后是字符串连接运算符,其后是裸字符串(即与任何已知关键字或保留字都不匹配的未引用字符串)“ ext”。显然,这没有预期的结果。

因此,必须注意,PHP自动用下划线替换输入变量名称中的任何点。

那是来自http://ca.php.net/variables.external

另外,根据此注释,这些其他字符也将转换为下划线:

以下是PHP转换为_(下划线)的字段名称字符的完整列表(不仅仅是点):

  • chr(32)()(空格)
  • chr(46)(。)(点)
  • chr(91)([](方括号)
  • chr(128)-chr(159)(多种)

因此,看起来好像您坚持使用它,因此您必须使用awnerd的建议将下划线转换回脚本中的点(不过我只是使用str_replace。)

解决方法

如果我.通过$ _GET 传递名称为PHP变量的PHP,则会自动用_字符替换它们。例如:

<?php
echo "url is ".$_SERVER['REQUEST_URI']."<p>";
echo "x.y is ".$_GET['x.y'].".<p>";
echo "x_y is ".$_GET['x_y'].".<p>";

…输出以下内容:

url is /SpShipTool/php/testGetUrl.php?x.y=a.b
x.y is .
x_y is a.b.

…我的问题是:有 什么 办法可以阻止我?无法为我的一生弄清我应做的一切

我运行的PHP版本是5.2.4-2ubuntu5.3。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。