php - 对 POST 变量名称中的字符的限制

标签 php post base64

我最近很惊讶地得知 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/

相关文章:

php - 使用 php 记录用户登录时间并在网站上显示

c# - Base64 编码和序列化数组 WHMCS

python - Gzip 到 base64 编码将字符添加到 JSON 字符串

c# - 我无法使用Image to Base64 String函数

php - 如何在 PHP 中使用 bcrypt 对密码进行哈希处理?

php - 从 PHP URL 保存图像

javascript - AJAX请求后获取数据

android - 如何将 Cookie session id 放入 volley request 中?

c++ - 如何在不使用套接字的情况下在 C++ 中发送 POST 请求

java - HttpURLConnection POST,conn.getOutputStream() 抛出异常