代码之家  ›  专栏  ›  技术社区  ›  DLH

在输入标记的HTML Name属性中允许哪些字符?

  •  74
  • DLH  · 技术社区  · 14 年前

    我有一个PHP脚本,将生成 <input> name 属性。

    我不知道其他规则。我认为必须允许使用方括号,因为PHP使用方括号从表单数据创建数组。括号怎么样?空间?

    5 回复  |  直到 10 年前
        1
  •  29
  •   Allain Lalonde    14 年前

    对表单控件名称中可以显示哪些字符的唯一真正限制是在使用GET提交表单时

    “get”方法将窗体数据集值限制为ASCII字符 reference

    here .

        2
  •  55
  •   Matthias Samsel    12 年前

    请注意,并不是所有的字符都提交 name 表单字段的属性(即使使用POST)!

    空白字符被修剪,内部空白字符以及字符 . 替换为 _ (在Chrome 23、Firefox 13和Internet Explorer 9中测试,均为Win7。)

        3
  •  38
  •   bobince    14 年前

    任何可以包含在[X]HTML文件中的字符都可以放入 <input name> <输入名称> 定义为包含 CDATA ,因此,唯一不能放入的是底层标准(SGML或XML)不允许的控制代码和无效代码点。

    Allain引用了HTML4规范中的W3:

    注意。“get”方法将表单数据集值限制为ASCII字符。只有“post”方法(enctype=“multipart/form data”)被指定覆盖整个ISO10646字符集。

    然而,这在实践中并不是真的。

    理论是 application/x-www-form-urlencoded multipart/form-data 相反。

    多部分/窗体数据 请求后正文(我相信Mozilla曾经尝试过实现它,但在服务器崩溃时退出了。)

    而且没有一个浏览器实现了惊人的复杂和丑陋 RFC2231 将编码的非ASCII字段名插入到多部分的子部分头中所需的标准。在任何情况下,定义 多部分/窗体数据

    所以name的数据类型与其他元素的不同?

    实际上 name 属性无效 CDATA酒店 <meta> . 参见HTML4规范 attribute list

    然而,通常这些天你会避免 除了表单字段(它是一个控件名)和 param (它是一个插件特定的参数标识符)。这只有两种含义需要解决。旧式用法 名称 用于识别以下元素 <form> <a> id 相反)。

        4
  •  9
  •   Aleksander Stelmaczonek    7 年前

    当我搜索这些知识的时候,这条线索作为第一个结果出现了,我想我还是分享一下我的发现吧。

    性格。替换为_

    这是不真实的。我不知道browser在2013年是否真的做过这种操作——不过,我对此表示怀疑。浏览器按原样发送点字符(谈论后期数据)!你可以在任何像样的浏览器的开发工具中查看它。

    我想指出的是,这是一个特定于服务器的东西,而不是浏览器的东西。在Win7 FF3/3.5/31、IE5/7/8/9/10/Edge、Chrome39和Safari Windows 5上进行了测试,所有测试都将“test this.stuff”(四个前导空格)作为名称发送到与VS2012捆绑的ASP.NET开发人员服务器。

    我的结论是: .

        5
  •  0
  •   John Parker    14 年前

    你是说HTML输入标签的id和name属性吗?

    如果是这样的话,我很想限制(或转换)允许的“input”名称字符,使其仅限于a-z(a-z)、0-9和有限范围的标点(“.”、“,”等),如果只是为了限制XSS攻击的可能性,等等。

    另外,为什么要让用户控制输入标记的任何方面(从验证的角度来看,保留输入标记名为“custom\u 1”、“custom\u 2”等,然后根据需要映射这些标记,这最终会不会更容易呢。)