2009-05-06 8 views
0

HTMLフォームをサードパーティのWebサイトに提出する必要があり、隠しフィールドの1つがXML文字列です。 XMLは、第三者に送信される前にエスケープする必要があります。HTML入力フィールドに割り当てるときに自動HTMLエンコーディングを停止する方法VB.NET

フォームフィールドにプレーンXMLを追加すると、セミエスケープされます。したがって、HTMLEncodeを使用すると、XMLの一部がダブルエスケープされます。 .NETからの自動エスケープを防ぐ方法を教えてください。

さらに、エスケープされたXMLを隠しフィールド経由でどのように送信することができますか。

XML

<systemCode>APP</systemCode> 

基本的な割り当て、私は何が起こっているかを見ることができます

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

だけでなくエンコードし、それをHTMLに隠された入力フィールド

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

に - しかし、私はしないでくださいそれを防ぐ方法を知っていますか?

答えて

0

私はリテラルを使用して、前にリテラルテキストフィールドにHTMLフォーム変数を割り当てられたXML文字列をHTMLEncoding。以下のように少ししてください:

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

これは問題を回避しています。

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>" 
+1

はもう一回それを言う....しかし気持ちでこの時間! ;) –

+1

もう一度投票したら、今度は気持ちで!:P – Cerebrus

+0

こんにちは、私はHTMLEncodeだけでなく、他のものを使用していません - 私はそれを単独で使用していますが、私は何かが自動的に起こっていると言っているので、XMLの<をこのようにエンコードしています:portalReq.Value = myXML - それは私が止めたい自動のものです! –

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の値を読み取ると、解析されたHTMLが同一であることがわかります。

デモ:
http://jsfiddle.net/gilly3/Xdj5E/