我的问题如下。我有一个 XHTML 1.1 页面,其中包含表单和输入字段。其中一个输入字段包含一个URI值。此URI包含带有和号(& )作为参数分隔符的键值对,它将作为GET请求传递给浏览器中的其他Web应用程序。
通常我会使用实体&
创建&符号来验证代码为 XHTML 1.1 。我的问题是应用程序没有收到GET请求,因为(正如预期的那样)浏览器不了解如何处理URI中的&
。
所以我的问题是如何在不使用HTML实体的情况下编写&符号,因此浏览器仍将其识别为参数分隔符,并将GET请求正确传递给Web应用程序。
我尝试使用Hex(%26)编码&符号,但浏览器仍然没有将其“翻译”回适当的&字符。
一个相关问题,但它没有提供我要问的问题的确切答案:
答案 0 :(得分:1)
如果不使用实体,则无法在属性值中包含&符号。
如果不使用实体或CDATA标记,则无法将&符号作为textNode包含(但我敢打赌,您将使用text / html,因此无法使用它们。)
那就是说 - 任何无法解码实体的浏览器都会被破坏。没有主流浏览器失败。您要么使用晦涩难懂的浏览器,要么误解了问题。
答案 1 :(得分:1)
正如您引用的其他问题所述,浏览器会将&
转换为&当页面被处理时,所以“&” (不是&
)应该在GET请求中发送到服务器。也许您正在使用Ajax来发出GET请求,在这种情况下,您可能需要解码HTML。 XHTML需要该实体 - 没有替代编码,只需确保它被正确解码。
答案 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 "&;"