程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

如何使用Python转义关闭JSON中HTML标记中的'/'?

发布于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方法您可能需要通过pipeasy_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黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

5 0
收藏该文
已收藏

评论内容:(最多支持255个字符)