当前位置: 首页 > 面试题库 >

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

白光耀
2023-03-14
问题内容

如果我.通过$ _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。


问题答案:

这是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值(例如)不作为函数的参数包括在内。 什么时候需要将POST和GET方法包括为函数的参数? 问题答案: 您何时需要将POST和GET方法包括为函数的参数? 我会说:“从来没有”:和什么叫做超全局:他们在整个脚本存在; 这意味着它们存在于函数/方法中。 特别是,您不需要那些关键字。 但是,依靠函数/方法中的那些方法还是很不习惯的:您的函数/方法通常不应该依

  • 使用 Ghostscript 9.19、Windows 10 专业版 我正在使用Ghostscript将现有PDF转换为PDF/A-1b。 然而,即使所需的字体已经嵌入到我的原始PDF中,Ghostscript仍在输出PDF/A文件中替换它们。 具体来说:将字体Times-Bold替换为Times New Roman,Bold。将字体Times-Roman替换为Times New Roman。将字

  • 问题内容: 是否可以将值作为数组输入? 如果我尝试使用发送链接,而我想在php端使用,那么该值如何成为数组?因为现在正在返回。它是标题链接中的最后一个ID。有什么建议么? 问题答案: 在PHP中执行此操作的通常方法是输入您的URL而不是: 然后将是这些值的数组。它不是特别漂亮,但是可以直接使用。

  • 所以我有这样的代码: 如你所见,如果我按“A”,它将用“E”代替“A”。但这就像多米诺骨牌效应:它现在检测“e”,并将其替换为“i”,以此类推,直到它得到“y”。我如何防止这种情况? 注意:我不擅长regex所以请试着解释一下。

  • 问题内容: 如何通过$ _GET将数组类型的一个或多个变量传递给另一页? 我总是以以下形式传递变量值 那传球呢? 我是否需要编写一个for循环并附加所有值? 谢谢 问题答案: 您可以使用语法通过_GET传递数组: PHP理解此语法,因此等于。 您还可以指定键: 多维数组也可以工作: 自动执行此操作: 一种替代方法是传递json编码的数组: 您可以解析为: 并再次使用json_encode对其进行编

  • 我知道这是一个常见的问题,因为我在决定发帖之前一直在寻找答案,但我似乎无法找到一个解决方案。 问题:我有一个分页脚本(PHP)用于我的搜索结果。显然常见的是,第一页的结果显示良好,然后在移动到第2、3页等时失败。 当点击页面2、3等时,我在搜索中使用的每个变量都有一个“未知索引”错误。 因此,I$_从表单中获得以下变量: 谢谢