2016-12-09 6 views
0

HTMLデータをサーバーに渡す最適な方法は何ですか。 私はdivのhtmlPageを持っています。このdivinnerHTMLをサーバーに渡して、セッションに保存して後で編集フロー中にdivを再作成できるようにします。私はそのdivのHTMLを設定し、サーバーに投稿する場合は、この隠しフィールドでフォームパラメーターとしてdivのhtmlコンテンツをサーバーに渡す方法

<input type="hidden" name="selectedTemplateHtml" id="selectedTemplateHtml" /> 

: 私は隠しフィールドを作成しました。 お勧めします。 私は単純にdivから$("#divName").html()を使ってhtmlを渡そうとしましたが、編集フローでは、HTMLが多くの行にまたがるのでjavascript変数にhtmlを格納することができないため、格納された値を取得します。 お勧めします。

私のケースでは、改行でリクエストを投稿することができました。私は投稿したhtmlを取り戻すことができましたが、新しい行の文字と二重引用符でjavascript変数に戻します

cdHtml="${postAdBean.cdHtml}"; 
templateId="${postAdBean.templateId}"; 
$("#"+templateId).html(cdHtml); 

それはつまり、最初の行に、ブラウザのコンソールで例外を提供します。:

cdHtml="${postAdBean.cdHtml}"; 
: 次のコード@Alexanderエラー

が編集の流れにHTMLを表示するために使用されています210

これは、サーバーから返されたHTMLをjavascript文字列に変換できないためです。

+0

[改行/改行を隠しフィールドの値として]重複している可能性があります(http://stackoverflow.com/questions/667915/post-newline-carriage-return-as-hidden-field-value) – tafa

+0

編集フローで保存された値を取得しますか?誰がその例外を投げますか?あなたはそのコードを投稿できますか? –

+0

あなたはサーバーに投稿している「html」を尋ねることができますか?このサウンドSCARYは、悪意のあるHTMLの包含が簡単に投稿され、後で表示される可能性があるという点で、ユーザ入力の場合はSCARYです。 – haxxxton

答えて

0

わかりました、私はそれは、このように動作するようになった: クライアントから隠しフィールドにHTMLを設定する前に、私はそれをエンコード:

selectedTemplateHtml=encodeURIComponent(selectedTemplateHtml); 
$("#selectedTemplateHtml").val(selectedTemplateHtml); 

これは、そうでない場合の問題を引き起こす可能性がHTMLに&のような特定の文字をエスケープするneccessaryです。 Javaで

: 文字列

cdHtml=URLDecoder.decode((request.getParameter("selectedTemplateHtml")),"UTF-8"); 
cdHtml=cdHtml.replace("\n"," ").replace("\r", " ").replace("\t", " "); 
cdHtml=cdHtml.replace("\"", "\\\""); 

すなわち。最初にhtmlをデコードし、すべての改行文字を置き換えてダブルコードをエスケープします。それから私はブラウザにHTMLを送り返し、それはjavascriptのように問題なく簡単に割り当て可能です。

関連する問題