BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #1765同步于 2014/7/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

HTML编码问题,Str替换

you
2014/7/22镜像同步12 回复
目的:用Django从后台deamon往前端传过来一字符串,内容是xml,在前端js来解析该xml xml如下: <?xml version="1.0" ?><info><safety_score>6.9</safety_score><risk_paths><path type="apk_init_leak"><sink_tags><SinkTag>国际移动装备辨识码</SinkTag></sink_tags><TriggerLevel>2</TriggerLevel><SendType>网络外发</SendType><SendAddr>40</SendAddr><Evidence>&lt;?xml version='1.0' encoding='utf-8' standalone='yes' ?&gt;.&lt;map&gt;.&lt;string name=&quot;random_device_id&quot;&gt;86404]</Evidence><SnapshotImg/></path><path type="apk_init_leak"><sink_tags><SinkTag>国际移动装备辨识码</SinkTag></sink_tags><TriggerLevel>2</TriggerLevel><SendType>网络外发</SendType><SendAddr>40</SendAddr><Evidence>&lt;?xml version='1.0' encoding='utf-8' standalone='yes' ?&gt;.&lt;map&gt;.&lt;string name=&quot;random_device_id&quot;&gt;86404]</Evidence><SnapshotImg/></path></risk_paths><finger_img_small/></info> js里使用document.getElementById("content").innerHTML="该xml"正常显示该内容 但是alert(该xml)却被转码,所有<、>、'、"被转成&lt;,&gt;&quot;&#39;, 估计该字符串就是这个形式的,导致使用new DOMParser().parseFromString(该xml)时出现问题。 现在可以使用replace(/&amp;/g,'&').replace( /&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"').replace(/&#39;/g,"'");来转义编码。 但是就不能保留原始数据里的&lt;等内容了。 还望大神指导!
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
you机器人#1 · 2014/7/22
发错版面还望谅解啊,实在是没找到HTML版。
Chon机器人#2 · 2014/7/22
有 WWWTechnology 【 在 you (you) 的大作中提到: 】 : 发错版面还望谅解啊,实在是没找到HTML版。
Chon机器人#3 · 2014/7/22
你是用django的模板处理的字符串?试试加上safe 【 在 you (you) 的大作中提到: 】 : 目的:用Django从后台deamon往前端传过来一字符串,内容是xml,在前端js来解析该xml : xml如下: : <?xml version="1.0" ?><info><safety_score>6.9</safety_score><risk_paths><path type="apk_init_leak"><sink_tags><SinkTag>国际移动装备辨识码</SinkTag></sink_tags><TriggerLevel>2</TriggerLevel><SendType>网络外发</SendType><SendAddr>40</SendAddr><Evidence : ...................
you机器人#4 · 2014/7/22
用safe确实有效,只是有个奇怪的问题 我的data=“<div>”时,前端alert("{{data|safe}}")正常弹出“<div>” 如是换成data= <?xml version="1.0" ?><info><safety_score>6.9</safety_score><risk_paths><path type="apk_init_leak"><sink_tags><SinkTag>国际移动装备辨识码</SinkTag></sink_tags><TriggerLevel>2</TriggerLevel><SendType>网络外发</SendType><SendAddr>40</SendAddr><Evidence>&lt;?xml version='1.0' encoding='utf-8' standalone='yes' ?&gt;.&lt;map&gt;.&lt;string name=&quot;random_device_id&quot;&gt;86404]</Evidence><SnapshotImg/></path><path type="apk_init_leak"><sink_tags><SinkTag>国际移动装备辨识码</SinkTag></sink_tags><TriggerLevel>2</TriggerLevel><SendType>网络外发</SendType><SendAddr>40</SendAddr><Evidence>&lt;?xml version='1.0' encoding='utf-8' standalone='yes' ?&gt;.&lt;map&gt;.&lt;string name=&quot;random_device_id&quot;&gt;86404]</Evidence><SnapshotImg/></path></risk_paths><finger_img_small/></info> 时,前端alert("{{data|safe}}")就弹不出来了,@Chon,这是什么原因呢? 【 在 Chon 的大作中提到: 】 : 你是用django的模板处理的字符串?试试加上safe
you机器人#5 · 2014/7/22
用return render_to_response("risk_iframe.html",{"data":data})返回模板的
Chon机器人#6 · 2014/7/22
safe是让后端的django处理的,怎么会对js生效 不要混在一起写 【 在 you (you) 的大作中提到: 】 : 用safe确实有效,只是有个奇怪的问题 : 我的data=“<div>”时,前端alert("{{data|safe}}")正常弹出“<div>” : 如是换成data= : ...................
binux机器人#7 · 2014/7/22
绝对不要手动转义 搞清楚html,js各种转义有什么不同 搞清楚输出是转义前还是转义后的 搞清楚变量的值和字面量
you机器人#8 · 2014/7/23
你说safe过滤器是让Django处理的?那么应该写在哪里呢,难道不是在html,js里用{{data|safe}}吗? 我也知道想在后台不让字符串转义直接传到前端,那么请问该如何做呢?有更好的方法? 模板板标签的去除转义我知道有safe过滤,形如{{data|safe}}和 {% autoescape off %}标签关闭转义,都是在前端做的,不知在后台如何关闭转义呢? 还望不吝赐教,thanks~ 【 在 Chon 的大作中提到: 】 : safe是让后端的django处理的,怎么会对js生效 : 不要混在一起写
binux机器人#9 · 2014/7/23
你搞错了,{{data|safe}}和 {% autoescape off %} 全都是后端做的 除非你把 view 也叫前端 【 在 you 的大作中提到: 】 : 你说safe过滤器是让Django处理的?那么应该写在哪里呢,难道不是在html,js里用{{data|safe}}吗? : 我也知道想在后台不让字符串转义直接传到前端,那么请问该如何做呢?有更好的方法? : 模板板标签的去除转义我知道有safe过滤,形如{{data|safe}}和 {% autoescape off %}标签关闭转义,都是在前端做的,不知在后台如何关闭转义呢? : ...................