我正在创建表单验证单元,除了“常规”测试检查编码之外。

根据这篇文章 http://www.w3.org/International/questions/qa-forms-utf-8 允许的字符为0-31的CR,LF和TAB,不允许使用DEL = 127。

另一方面,0x80-0xA0 范围内有控制字符。在不同的消息来源,我看到它们被允许,而不允许。我也看到XHTML,HTML和XML有所不同。

有些文章说FF也可以?

有人可以提供一个很好的答案,说明什么可以提供,什么不能提供?

编辑:即使在那里 http://www.w3.org/International/questions/qa-controls 有些含糊不清

支持C1范围

但表显示它们是非法的,并且之前显示的 UTF-8 验证允许它们?

有帮助吗?

解决方案

在这些范围中的Unicode字符有效在HTML 4.01:

0x09..0x0A
0x0D
0x20..0x7E
0x00A0..0xD7FF
0xE000..0x10FFFF    

在XHTML 1.0 ...目前还不清楚。请参阅 http://cmsmcq.com/2007/C1.xml#o127626258

其他提示

我认为你看待这个问题的方式是错误的。您链接的资源指定哪些编码值在其中有效 (X)HTML, ,但听起来您想要验证来自 Web 表单的“响应” - 例如,传递回服务器的各种表单控件的值。在这种情况下,您不应该查看 (X)HTML 中的有效内容,而应该查看 (X)HTML 中的有效内容。 应用程序/x-www-form-urlencoded, ,也可能是 多部分/表单数据, MIME 类型。这 HTML 4.01 标准 <FORM> 元素 明确指出对于 application/x-www-form-urlencoded,“非字母数字字符被替换为 '%HH'”:

这是默认的内容类型。使用此内容类型提交的表单必须按如下方式编码:

  1. 控件名称和值被转义。空格字符被替换为“+”,然后保留字符被转义,如中所述 [RFC1738], ,第 2.2 节:非字母数字字符将替换为“%HH”、一个百分号和两个表示字符 ASCII 代码的十六进制数字。换行符表示为“CR LF”对(即“%0D%0A”)。
  2. 控件名称/值按照它们在文档中出现的顺序列出。名称与值之间用“=”分隔,名称/值对之间用“&”分隔。

至于包含什么字符编码,(即无论 %A0 是不间断空格或错误),这是由 accept-charset 属性在你的 <FORM> 元素和响应(嗯,实际上是 GET 或者 POST 要求) Content-Type 标头。

  

普天定律:在你做什么保守的;在自由派你接受别人的。

如果您正在生成的其他文档的阅读,你应该避免/逃避所有的控制字符,即使他们是技术上是合法的。如果你正在解析文档,你应该努力接受所有的控制字符,即使他们是技术上是非法的。

所有任何八位位组的第一个是有效的。的提到正则表达式只是省略了一些UTF-8序列他们的,因为他们在实践中相当罕见的由用户输入。但是,这并不意味着它们是无效的。他们只是不希望发生的。

你提到不具有任何与在XHTML验证允许的字符...该链路上的示例仅仅是示出用于检测是否原始数据的公共/通用图案的第一连杆是UTF-8编码或没有。

这是从第二连杆报价:

  

HTML,XHTML和XML 1.0不支持   在C0范围,除了HT   (水平制表)U + 0009,LF   (换行)U + 000A,和CR(滑架   返回)U + 000D。在C1的范围是   支持,即可以将编码   直接控制或它们表示为   NCR的(数字字符引用)。

我读这一问题的方法是:

如果您编码它们(使用Base64,或十六进制表示)在C1范围的任何控制字符被支撑或它们表示为NCR的。

只有U + 0009,U + 000A,和U + 000D在C0范围被支持。在该范围内没有其他控制码可以表示

如果文档被称为是XHTML,那么就应该只加载它,并对其进行验证的模式。

你用什么编程语言?至少为Java存在库检查的字符串(或字节数组)的编码。我想类似的库将存在其他语言了。

我是否正确理解你的问题:您想检查表单提交的数据是否有效且编码正确?

如果是这样,为什么要同时做几件事呢?恕我直言,将这些检查分开并逐步执行它们会容易得多。

  1. 您想要检查提交的表单数据是否正确编码(我收集的编码为 UTF-8)。正如里德库利大法官所说,那就是 易于检查 在大多数语言中。
  2. 然后,如果编码正确,您可以检查它是否是有效的表单数据。
  3. 然后,如果表单数据有效,您可以检查数据是否包含您期望的内容。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top