POST变量名中字符的限制

时间:2013-12-30 01:30:51

标签: php post base64

我最近惊讶地发现,PHP会自动且不可避免地将所有句点转换为POST字段名称中的下划线,因为PHP中的变量名称不允许使用句点。

我的POST数据是用其中包含任意数据的名称键入的,我正在考虑使用Base64编码POST名称来避免句点问题。但是,Base64字母包含字符+/=。变量名中也不允许使用这些字母,但这些字符对于POST名称是否正常? PHP将如何处理它们?

2 个答案:

答案 0 :(得分:4)

变量名中不允许使用以下字符:

chr(32) ( ) (space)
chr(46) (.) (dot)
chr(91) ([) (open square bracket)
chr(128) - chr(159) (various)

(引用:Get PHP to stop replacing '.' characters in $_GET or $_POST arrays?

对于其他人,+, /, and =适用于$_POST,适用于变量名称。

首先,如果你确定$_POST中的所有下划线都应该是句号(这可能是也可能不是公平的假设,但......)

<form name=test>
<input type=text name="+./=" value='hello'>
<input type=submit>

<?php
foreach ($_POST as $key=>$postVar)
{
$newKey=str_replace("_",".",$key);
$newPost[$newKey]=$postVar;
}
$_POST=$newPost;
echo $_POST['+./=']; //hello

以变量名称,您可以使用Variable variables

${'var+./='}=1;
echo ++${'var+./='}; //2
?>

答案 1 :(得分:2)

来自website

变量名遵循与PHP中其他标签相同的规则。有效的变量名称以字母或下划线开头,后跟任意数量的字母,数字或下划线。作为正则表达式,它将表达如下:

'^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*' 

包括用户在同一页面的评论中所做的更正。

以字母[a-z]或下划线或\x7f to \xff之间的任何内容开头。

这可以是上面列出的任何内容以及数字。

如果没有测试,并且关闭错误,我的假设是PHP将替换任何不应该使用下划线的字符。希望有所帮助。