注:この質問はEmbedding JSON objects in script tagsに非常に近いですが、その質問に対する回答は私がすでに知っていることを提供しています(JSON /
== \/
)。私はその脱出をする方法を知りたい。PythonでJSONのHTMLタグで '/'を閉じるのを避けるにはどうしたらいいですか?
HTML仕様では、閉じたHTMLタグを<script>
要素内のどこかで禁止しています。
<script>
var assets = [{
"asset_created": null,
"asset_id": "575155948f7d4c4ebccb02d4e8f84d2f",
"body": "<script></script>"
}];
</script>
、私はすなわち、Djangoテンプレート内でJSON文字列を描画することにより、不正な状況が発生しています:
<script>
var assets = {{ json_string }};
</script>
私はJSONが\/
を解析することを知っているので、これはパースエラーが発生します/
と同じです。したがって、JSON文字列で閉じるHTMLタグをエスケープできれば、いいと思います。しかし、私はこれを行うための最善の方法は不明です。
私の素朴なアプローチは、ちょうどこの次のようになります。
json_string = '[{"asset_created": null, "asset_id": "575155948f7d4c4ebccb02d4e8f84d2f", "body": "<script></script>"}]'
escaped_json_string = json_string.replace('</', r'<\/')
がより良い方法はありますか?または私が見落としているどんな邪魔?
これはXHTMLでのみ有効です。 '' <!doctype html> ''では、 '' CDATA''は動作していないようです。だから私はJSONで '' \/''エスケープすることを好みました。問題は、テキスト自体をエスケープする方法よりも、エスケープのための文字列置換を行う方法に関するものでした。 –
@GeoffreyHingああ、私は間違ってXHTMLの部分を想定していた。私はDJangoエスケープパートのための私の答えを更新しました。 – cwgem
@GeoffreyHing:djangoには、 'django.utils import simplejson'を使用してインポートできるsimplejsonの独自のコピーが付属していますので、別途インストールする必要はありません。 –