jsonとjqueryを使って画像のプレビューとキャプションを表示したい。私の PHP スクリプトは json データをエンコードし、プレビューのために jquery に送信します。データにはhtmlとjavascriptが含まれています。プレビューでは HTML が表示されますが、javascript タグは省略されています。jsonパーサーがこのタグを削除すると思います。これが私のコードです
PHPコード
$code = '
<div class="mosaic-block bar">
<div class="mosaic-overlay">
<div class="details">
<h4>Sloppy Art - A Mess of Inspiration</h4>
<p>via the Nonsense Society</p>
</div>
</div>
<div class="mosaic-backdrop"><img src="http://buildinternet.s3.amazonaws.com/projects/mosaic/florian.jpg"/></div>
</div>
<script type="text/javascript">jQuery(function($){$(".bar").mosaic();});</script>';
$json_msg = array('success'=>true, 'msg'=> $code);
echo encode_json($json_msg);
exit;
function encode_json ($mixed_data) {
if(is_array($mixed_data) && isset($mixed_data['msg'])) {
$mixed_data['msg'] = utf8_encode($mixed_data['msg']);
}
return json_encode($mixed_data, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT);
}
Javascript
var form_options = {
success: ShowPreview,
url: url,
type: 'post',
dataType: 'json',
clearForm: false,
resetForm: false,
cache: false,
timeout: 200000,
};
$('.preview-form').ajaxSubmit(form_options);
function ShowPreview(data) {
if(data.success){
$.fn.colorbox({html:data.msg});
}
}
上記のコードは、この部分が欠落していることを除いて、カラーボックスにすべて正常に表示されます。json<script type="text/javascript">jQuery(function($){$(".bar").mosaic();});</script>
パーサーによって解析されているこの JavaScript をエスケープするにはどうすればよいですか?
編集
問題がjsonパーサーにあることを確認できます。フォーム送信オプションでデータ型をjsonからHTMLに変更したところ、応答で次のエンコードされた文字列が見つかりました();});\u003C/script\u003E
次のコード var data = jQuery.parseJSON(msg); を使用して、データを json に戻します。
script タグがデータから削除されました。パーサーが javascript タグを削除する理由をまだ理解しようとしていますか?