我最近很惊讶地得知 PHP 会自动且无法阻止地将所有句点转换为 POST 字段名称中的下划线,因为在 PHP 中变量名中不允许使用句点。
我有 POST 数据,这些数据以其中包含任意数据的名称为键,我正在考虑对 POST 名称进行 Base64 编码以避免句点问题。但是,Base64 字母表包含字符 +
、/
和 =
。变量名中也不允许使用这些字母,但是这些字母可以用于 POST 名称吗? PHP 将如何处理它们?
最佳答案
变量名中不允许使用以下字符:
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?)
对于其他人来说,+、/和 =
适用于 $_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
?>
关于php - 对 POST 变量名称中的字符的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20832133/