2009-03-17 1 views
7

私のAjaxリクエスト(jQueryを使用)では、私はJSONという応答を返しています。jQueryでは、JSON結果でHTMLを返していますが、どうすればエスケープする必要がありますか?

だからjson.Htmlには、divの中に追加したいHTMLの文字列があります。

サーバー側では、HTMLをエスケープする必要がありますか?

私のMVCのアクションで

、私は戻っています:JSON文字列に入れるべきコンテンツをエスケープするとき

return Content("{html: ???????}, "application/json"); 

答えて

14

代わりの解決策は、単純にHTMLを返し、jQueryのload()

$('#someDiv').load('servershtml.html'); 

はしかしそれをあなたの方法を行うには、二重引用符やバックスラッシュをエスケープするだけ必要があります。

specificationは非常に読みやすく短いです。

7

をあなたが唯一の(ALA \」と\\)引用符とスラッシュにスラッシュを追加する必要がありますHTML。文字はJSON文字列内に何も意味しないので、それでも問題ありません:)

もちろん、文字列が整形式(X)のHTMLであることを確認してdivに挿入すると爆発しないようにしてください。

+0

どのような\ a \ b \ c、すべてがOKですか? – Blankman

1

dataTypeconfiguration option'json'に設定すると、completeイベントに渡されるオブジェクトはそのjavascriptオブジェクトになります。基本的には、jQueryは応答コンテンツ(適切にフォーマットされたJSONを想定)をjavascriptオブジェクトに変換する作業を行います。例...

$.ajax({ 
    dataType: 'json', 
    complete: function(myJsonObject) { 
     alert(myJsonObject.someMember); 
    } 
}); //$.ajax({ 

あなたはそれが非常に、非常に簡単にJSONを生成しますので、その後、私は Json.NETを探求することをお勧めします、.NETから適切な形式のJSONを生成する方法を迷っている場合。

6

HTMLとJSONを作成するときにあなたがして二重引用符、およびもCLRF文字エスケープする必要があり、それはHTMLの罰金を返します。

私は、AJAXリクエストからコールされたOracleプロシージャ内のpl/sqlを使用して作業しました。あなたが望むなら、私は実装を投稿することができます。

http://www.jsonlint.com/の出力をテストして有効かどうかを確認する必要があります。

ので

{ 
    "id": "1", 
    "html_value": "<a href=\"http://www.google.com\">test link returnin html code</a>" 
} 

があるためCLRF文字の

{ 
    "id": "1", 
    "html_value": "<a href=\"http://www.google.com\">test link returnin 
html code</a>" 
} 

から切り抜いたです。サーバー側のものを&nbspに置き換える必要があります。または<br/>。jQueryので

$htmlSnippet = '<a href="#"></foo>'; 
return json_encode(array("html" => $htmlSnippet)); 

あなたのいずれかのdataType 'JSON' を宣言(上記の解答を参照)、または復号化:このことができます

希望、 アレックス

1

あなたがPHPのjson_encodeを使用している場合は、あなたのためのトリックを行いますby jQuery.parseJSON

5

私はPHPで自分の経験を投稿します。私はそれが助けてくれることを望む。

通常、データをエンコードする一つの使用json_encode()機能、例えば:

json_encode(array('data1' => 'String data with text', 
       'data2' => '<a href="www.stackoverflow.com">The Site</a>')); 

json_encode()はUTF-8文字列でのみ正常に動作しますので、私は機能utf8_encode()てUTF-8でのすべての文字列をエンコードすることをお勧め、すなわち

json_encode(array(utf8_encode('data1') => utf8_encode('String data with text'), 
       utf8_encode('data2') => utf8_encode('<a href="www.stackoverflow.com">The Site</a>'))); 

また、あなたは特別な文字を使用している場合(イタリア語の単語でàとèなど)、返されたjson UTF8でエンコードされたHTMLをデコードすることをお勧めします。これはHTMLページで(AJAX呼び出しの結果など)使用する必要がある場合に特に便利です。 Javascriptをてデコードするには、使用:

decodeURIComponent(escape(html)); 

htmlは返さエンコードされたHTMLコードです。

よろしくお願いいたします。

関連する問題