【问题标题】:Valid value for the "name" attribute in HTMLHTML 中“名称”属性的有效值
【发布时间】:2012-05-09 07:16:52
【问题描述】:

我使用 PHP 从 HTML 页面获取单选按钮值。我的 HTML 如下所示:

<input type="radio" name="1.1" value="yes">
<input type="radio" name="1.1" value="no">

<input type="radio" name="1" value="yes">
<input type="radio" name="1" value="no">

结果是 $_POST['1'] 返回一个值,但 $_POST['1.1'] 什么也不返回。我检查了 HTML 4 规范,说 name 属性的值仅以字母开头,但 1 不是字母。为什么它会返回而 1.1 没有?还是这里发生了其他的魔法?我使用的是最新版本的 Chrome。

【问题讨论】:

    标签: html


    【解决方案1】:

    根据 HTML 规则,name 属性可以具有任何值:它以 CDATA 类型声明。不要将此属性与声明为具有 NAME 类型的属性的引用混淆。请参阅17.4 The INPUT element, name = cdata [CI]

    在 PHP 中使用$POST[...] 时,需要注意这条 PHP 规则:“变量名中的点和空格转换为下划线。例如,&lt;input name="a.b" /&gt; 变为 $_REQUEST["a_b"]。”请参阅Variables From External Sources

    所以$_POST['1'] 应该按原样工作并且确实可以工作,但是你需要写$_POST['1_1'] 而不是$_POST['1.1']

    【讨论】:

    • 感谢发布第二个链接!
    • 这里是name属性对应的HTML5文档:w3.org/TR/html5/…
    • @Jukka K. Korpela:如果你写Do not confuse the with the references to attributes declared as having NAME type.,这意味着什么?有什么区别?
    • 属性声明为NAME 类型是基于其正式的SGML 应用程序的HTML 4 概念。属性的正式定义中的NAME 关键字表示属性值必须以字母开头,并且只能包含字母、数字和下划线。如此声明的属性在Index of Attributes(在 HTML 4 规范中)的“类型”列中具有“名称”。自 HTML5 以来不再使用此概念,它不使用 SGML 形式。
    • "附近似乎缺少某些东西"...与引用混淆".
    【解决方案2】:

    尝试将句点替换为连字符等其他内容。在表单和 PHP 代码中。句点通常用于扩展名中的.

    当涉及到GETPOST 标头中的参数键名时,您只想使用字母数字字符,通常带有一些特殊字符。例如连字符、下划线等。如果需要,您也可以随时进行 URL 编码。

    【讨论】:

      【解决方案3】:

      您应该使用文本而不是数字来命名您的输入项。它们不应包含任何字符,例如 .,!?。这可能会导致问题。有关提交数据的更多信息,请转至 PHP and HTML Radio Buttons

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-03
        • 2011-02-25
        • 1970-01-01
        • 2015-04-13
        • 2016-01-05
        • 2010-09-18
        • 2011-05-28
        相关资源
        最近更新 更多