以变​​量名称加点

8 php query-string

我在查询字符串中传递带有点的变量.Php正在用低于分数替换点.那么如何保留名称中包含点的变量名称

HTTP://localhost/sample.php此时就把one.txt存盘= ON&two.txt =上

sample.php

$ ret = $ _ REQUEST ['one.txt']; //不工作

Car*_*ima 27

PHP将变量名one.txt转换one_txt为的原因是因为点在变量名中无效.

有关更多详细信息,请查看PHP文档:

变量名称遵循与PHP中其他标签相同的规则.有效的变量名称以字母或下划线开头,后跟任意数量的字母,数字或下划线.作为正则表达式,它将表示为:'[a-zA-Z_\x7f-\xff] [a-zA-Z0-9_\x7f-\xff]*'

您可以考虑更改(._)和检查,$_REQUEST['one_txt']也可以使HTML表单传递有效的变量名称.

编辑:

要跟进Michael Borgwardt的评论,这里是PHP文档中关于从外部源处理变量的文本:

输入变量名称中的点

通常,PHP在传递到脚本时不会更改变量的名称.但是,应该注意,点(句点,句号)不是PHP变量名中的有效字符.出于这个原因,看看它:

<?php
$varname.ext;  /* invalid variable name */
?>
Run Code Online (Sandbox Code Playgroud)

现在,解析器看到的是一个名为$ varname的变量,后跟字符串连接运算符,后跟barestring(即不带引号的字符串,它与任何已知的密钥或保留字不匹配)'ext'.显然,这没有预期的结果.

因此,请务必注意PHP会自动使用下划线替换传入变量名中的任何点.

它确实是PHP特有的东西.

  • 我不知道PHP的标识符规则如何与查询字符串键名有效相关.如果有的话,这是一个特定于PHP的约定,因为register_globals功能无论如何都不应该使用,因为它非常不安全. (5认同)
  • @Michael Borgwardt:你确实提出了一个有效的观点.这是一个特定于PHP的东西,可能是register_globals默认时的遗留问题.我希望没有人再使用了:) (2认同)

Pos*_*ion 6

使用$ _SERVER ['QUERY_STRING']

$get = array();
foreach(explode('&', $_SERVER['QUERY_STRING']) as $part)
    {
    $part = explode('=', $part);
    if($key = array_shift($part))
        {
        $get[ $key ] = implode('', $part);
        }
    }
print_r($get);
Run Code Online (Sandbox Code Playgroud)

示例数组的结果([one.txt] => on [two.txt] => on)