要按字面意思回答这个问题,在php中命名$_POST和$_GET数组键确实没有"规则" .这是一个像其他任何一个阵列.在Codepad上看一下这个工作示例:
<?php
$_POST['????'] = 'value1';
$_POST['\'\'\'\''] = 'value2';
$_POST['<?php echo "Hello World"; ?>'] = 'value3';
$_POST[' '] = 'value4';
$_POST[''] = 'value5';
$_POST['@#$%^&*()'] = 'value6';
print_r($_POST);
Run Code Online (Sandbox Code Playgroud)
在表单输入名称的情况下,它们只需要是合法的HTML"名称"属性(见下文).但是,在实践中,很多不寻常的角色实际上都会起作用.请记住,这并不意味着这是一个好主意.不同的服务器(可能是不同的浏览器)对某些字符(如空格)的行为也不同.
正如Tadeck所指出的那样,重复的键在读取时将被最后一个键覆盖,但是使用brackets[]将通过将变量转换为数组来在客户端解决此问题.
就命名惯例和最佳实践而言,没有太多空间.建议您坚持使用AZ az 0-9,破折号和下划线.尽管Ajay建议使用数据库列名作为表单输入名称,但很多人会告诉您,向公众公开有关数据库的信息是不好的做法.我认为invertedlambda大概有最接近答案这里的问题,并Tadeck具有最接近的答案尽可能最佳实践.
关于HTML"名称"属性:http://www.w3.org/TR/html4/types.html#h-6.2
ID和NAME令牌必须以字母([A-Za-z])开头,后面可以跟任意数量的字母,数字([0-9]),连字符(" - "),下划线("_") ,冒号(":")和句号(".").
也许有人可以告诉我上述文件是否是规则或建议,我绝不是这方面的专家.我似乎没有在实践中违反这些规则的问题.我也可以将此示例文档验证为XHTML严格:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title></title>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
</head>
<body>
<div><form action="" method="post">
<div>
<input name="????" />
<input name="''''" />
<input name=")(&#$)%#$%" />
</div>
</form>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
将其粘贴到验证器中,它将通过.
添加的另一个最佳做法:使表单输入名称或获取/发布键有意义,当然,与其他每个命名约定一样.不要使用input1和$_GET['param'].使用描述含义的名称,例如last_name或$_GET['sort_order'].