发布于2019-11-10 11:00 阅读(1034) 评论(0) 点赞(5) 收藏(4)
注意:这个问题非常接近在脚本标签中嵌入JSON对象,但是对该问题的回答提供了我已经知道的(在JSON /
==中\/
)。我想知道如何进行转义。
HTML规范禁止在<script>
元素内的任何位置使用封闭的HTML标签。因此,这会导致解析错误:
<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'<\/')
有没有更好的办法?还是我忽略的任何陷阱?
更新的答案
好吧,我错误地假设了一些事情。为了转义JSON,simplejson库提供了可以使用的JSONEncoderForHTML方法。您可能需要通过pip
或easy_install
如果代码不起作用来安装它。然后,您可以执行以下操作:
import simplejson
asset_json=simplejson.loads(json_string)
encoded=simplejson.encoder.JSONEncoderForHTML().encode(assets_json)
这encoded
将为您提供:
'{"asset_id": "575155948f7d4c4ebccb02d4e8f84d2f", "body": "\\u003cscript\\u003e\\u003c/script\\u003e", "asset_created": null}'
与斜杠替换相比,这是一个更全面的解决方案,因为它也可以处理其他编码警告。
这loads
部分是已经对JSON进行编码的副作用。可以通过不使用DJango(如果可能)来生成JSON来避免这种情况,而可以使用simplejson:
simplejson.dumps(your_object_to_encode, cls=simplejson.encoder.JSONEncoderForHTML)
旧答案
尝试将脚本包装在CDATA中:
<script>
//<![CDATA[
var assets = [{
"asset_created": null,
"asset_id": "575155948f7d4c4ebccb02d4e8f84d2f",
"body": "<script></script>"
}];
//]]>
</script>
这是为了在这种情况下标记解析器。否则,您将需要使用已提到的字符转义符。
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/149248/0dea3079f4805e66d261/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!