操作方法XHTML 1.1验证&符号而不转义它?

时间:2010-01-13 23:13:17

标签: php validation xhtml entity

我的问题如下。我有一个 XHTML 1.1 页面,其中包含表单和输入字段。其中一个输入字段包含一个URI值。此URI包含带有和号(& )作为参数分隔符的键值对,它将作为GET请求传递给浏览器中的其他Web应用程序。

通常我会使用实体&创建&符号来验证代码为 XHTML 1.1 。我的问题是应用程序没有收到GET请求,因为(正如预期的那样)浏览器不了解如何处理URI中的&

所以我的问题是如何在不使用HTML实体的情况下编写&符号,因此浏览器仍将其识别为参数分隔符,并将GET请求正确传递给Web应用程序。

我尝试使用Hex(%26)编码&符号,但浏览器仍然没有将其“翻译”回适当的&字符。

一个相关问题,但它没有提供我要问的问题的确切答案:

XHTML and & (Ampersand) encoding

5 个答案:

答案 0 :(得分:1)

如果不使用实体,则无法在属性值中包含&符号。

如果不使用实体或CDATA标记,则无法将&符号作为textNode包含(但我敢打赌,您将使用text / html,因此无法使用它们。)

那就是说 - 任何无法解码实体的浏览器都会被破坏。没有主流浏览器失败。您要么使用晦涩难懂的浏览器,要么误解了问题。

答案 1 :(得分:1)

正如您引用的其他问题所述,浏览器会将&转换为&当页面被处理时,所以“&” (不是&)应该在GET请求中发送到服务器。也许您正在使用Ajax来发出GET请求,在这种情况下,您可能需要解码HTML。 XHTML需要该实体 - 没有替代编码,只需确保它被正确解码。

参考:The & changes to & in a hyperlink

答案 2 :(得分:1)

逃脱的&应该由XHTML文档中的客户端(浏览器)转换。

所以 应该&

每个&

答案 3 :(得分:0)

如果没有代码,很难说出你要保留这些信息的位置,如果你可以发布代码,我们可以更好地理解这个问题。

一种可能(如果这实际上是你所面对的)是将查询字符串中的项目移动到其他表单元素中,例如:

<form action="example.com/?foo=1&bar=2>
    <!-- ... -->
</form>

为:

<form action="example.com">
    <input type="hidden" name="foo" value="1" />
    <input type="hidden" name="bar" value="2" />
    <!-- ... -->
</form>

答案 4 :(得分:0)

我无法在此花费更多时间。我只是将参数分隔符更改为还包括分号(;),因此我可以使用它而不是&符号:

#cat .htaccess
php_value arg_separator.input "&;"