0

我必须向第 3 方网站提交 HTML 表单,其中一个隐藏字段是 XML 字符串。XML 在发送给第三方之前需要转义。

但是,当我将纯 XML 添加到表单字段时,它会为我半转义。因此,当我自己使用 HTMLEncode 时,部分 XML 被双重转义。如何防止似乎从 .NET 中自动转义。

或者更好的是如何通过隐藏字段发送转义的 XML。

XML

<systemCode>APP</systemCode>

基本分配给隐藏的输入字段

&lt;systemCode>APP&lt;/systemCode>

当我也对其进行 HTML 编码时

&amp;lt;systemCode&amp;gt;APP&amp;lt;/systemCode&amp;gt;

我可以看到发生了什么 - 但我不知道如何防止它?

4

3 回答 3

4

不要使用 HTMLEncode !单独使用!

就像是:

'Setting value:
hdnField.Value = Server.HtmlEncode("<systemCode>APP</systemCode>")
'Outputs: &amp;lt;systemCode&amp;gt;APP&amp;lt;/systemCode&amp;gt;

'Retrieving encoded value:
Dim escaped as string = Request.Form("hdnField")
'Retrieves: &lt;systemCode&gt;APP&lt;/systemCode&gt;

'Retrieving decoded value:
Dim myValue As String = Server.HtmlDecode(Request.Form("hdnField"))
'Retrieves: "<systemCode>APP</systemCode>"
于 2009-05-06T09:54:17.053 回答
0

最后,我使用了文字,然后 HTMLEncoding XML 字符串,然后将 HTML 表单变量分配给文字文本字段。有点像下面:

portalReq.Text = "<input type=""hidden"" name=""portalReq"" value='" & HTMLENCODE(RequestXML) & "' />"

不优雅,但它绕过了这个问题。

于 2009-05-19T07:58:04.963 回答
0

您无需担心 HTML 输出。只需担心表单中提交了哪些数据。HTML 是完全转义还是部分转义都没有关系 -无论哪种方式都提交相同的数据

这两个字段:

<input name="xml" value="&lt;systemCode>APP&lt;/systemCode>" />
<input name="xml" value="&lt;systemCode&gt;APP&lt;/systemCode&gt;" />

提交为:

xml=%3CsystemCode%3EAPP%3C%2FsystemCode%3E

这是与语言无关的——它是浏览器的行为。当浏览器解析 HTML 时,它实际上会将两个字段标准化为具有相同的 html。如果您查看页面的源代码,您将看到输入之间的源 HTML 不同,但如果您读取该form.innerHTML值,您会看到解析后的 H​​TML 是相同的。

演示:http:
//jsfiddle.net/gilly3/Xdj5E/

于 2012-06-08T17:57:33.823 回答