命名POST / GET变量的规则?

时间:2011-05-10 00:35:34

标签: html http post get

在表单中命名POST变量或查询字符串中的GET变量时,是否需要遵循任何规则?

谢谢 -

4 个答案:

答案 0 :(得分:8)

要按字面意思回答这个问题,在php中命名$_POST$_GET数组键确实没有“规则”。这是一个像其他任何一个阵列。看看this working example on Codepad

<?php
$_POST['♠♣♥♦'] = 'value1';
$_POST['\'\'\'\''] = 'value2';
$_POST['<?php echo "Hello World"; ?>'] = 'value3';
$_POST['     '] = 'value4';
$_POST[''] = 'value5';
$_POST['@#$%^&*()'] = 'value6';

print_r($_POST);

在表单输入名称的情况下,它们只需要是合法的HTML“名称”属性(见下文)。但是,在实践中,很多不寻常的角色实际上都会起作用。请记住,这并不意味着这是一个好主意。不同的服务器(可能是不同的浏览器)会对某些字符(例如空格)采取不同的行为。

正如Tadeck所述,重复的密钥在阅读时会被最后一个密钥覆盖,但使用brackets[]将在客户端通过将变量转换为数组来解决此问题。

就命名惯例和最佳实践而言,没有太多空间。建议您坚持使用A-Z a-z 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 strict:

<!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=")(&amp;#$)%#$%" />
</div>
</form>
</div>
</body>
</html>

将其粘贴到the validator,它会通过。


添加的另一个最佳做法:使表单输入名称或获取/发布键有意义,当然,与其他每个命名约定一样。请勿使用input1$_GET['param']。使用描述含义的名称,例如last_name$_GET['sort_order']

答案 1 :(得分:4)

总之,没有 - 只要您的变量名称符合您正在使用的HTTP规范和支持Web服务器,您就可以随意调用您的参数。

如果您在命名变量时使用相同的命名参数指南,那么您应该能够选择一个好名字。

答案 2 :(得分:3)

我认为最好的解决方案是:

  • 使用小写,
  • 不使用圆点,任何其他特殊字符(可以接受非预期),
  • 了解在请求期间传递它们的方式(例如。name="test[][]"将在其他数组中的数组中创建值)并正确使用它,
  • 避免创建冲突(例如。?test=1&test=2会产生问题,因为只传递其中一个值 - 更好地使用?test[]=1&test[]=2,以便传递具有两个值的数组),
  • 保持一致,

此外,浏览您在GitHub.com上可能找到的不同解决方案,这样您就可以使用很多人都很好,经过测试和使用的实践。

答案 3 :(得分:-1)

我们可以将名称用作变量名称规则,但也可以将关键字用作GET / POST变量名称。 更好的是,我们可以使用与数据库列名相同的名称。但是没有像这样的规则。 这些是一些建议。