innerHTML 和静默解码的引号
innerHTML and silently decoded quotes
设置:
在页面上,隐藏的 div 中是一个格式正确的 JSON 对象。
作为这个对象的一部分,一些值是HTML,在这个HTML中,双引号是HTML编码的,像这样:"addtionalInfo": "If you need more help, please visit <a href="http://www.google.com">Google</a>"
在页面的后面,我正在尝试编写 JS 来读取这个对象,以便可以完成其他很酷的事情。
问题:
innerHTML 似乎隐式解码引号,这意味着 JSON.parse() (和类似的 jQuery 选项)失败,因为语法错误。我无法替换 () 引号,因为它们以正确的 JSONy 方式无处不在。
一个例子:
<span class="hiddenField" id="TheJSONObject">
{ "thing" : "thingvalue", "badthing" : "a <a href="http://www.google.com">link!</a>", "lastthing" : "lastthingvalue" }
</span>
<script>
var newobj = JSON.parse(document.getElementById("TheJSONObject").innerHTML.trim());
alert(newobj.thing);
来自控制台的证明(CHROME):
console.log(document.getElementById("TheJSONObject").innerHTML)
{ "thing" : "thingvalue", "badthing" : "a <a href="http://www.google.com">link!</a>", "lastthing" : "lastthingvalue" }
问题:
有没有什么方法可以得到实际的原始内部 HTML 而无需 JS 试图像这样善待我,这样 JSON.parse() 就可以工作了?
那是完全不可能的。你有一个 <span>
,而不是 <script>
或任何其他被视为文字文本的东西,所以 "
和 "
之间没有区别。您需要首先对其进行正确编码;这可能意味着 HTML-encoding JSON-encoded 对象包含 HTML-encoded 输出值作为 HTML.
如果您无法修改该输出,最接近的可能是发出 (XHR) 请求并在实体完好无损的情况下手动解析它。
设置:
在页面上,隐藏的 div 中是一个格式正确的 JSON 对象。
作为这个对象的一部分,一些值是HTML,在这个HTML中,双引号是HTML编码的,像这样:"addtionalInfo": "If you need more help, please visit <a href="http://www.google.com">Google</a>"
在页面的后面,我正在尝试编写 JS 来读取这个对象,以便可以完成其他很酷的事情。
问题: innerHTML 似乎隐式解码引号,这意味着 JSON.parse() (和类似的 jQuery 选项)失败,因为语法错误。我无法替换 () 引号,因为它们以正确的 JSONy 方式无处不在。
一个例子:
<span class="hiddenField" id="TheJSONObject">
{ "thing" : "thingvalue", "badthing" : "a <a href="http://www.google.com">link!</a>", "lastthing" : "lastthingvalue" }
</span>
<script>
var newobj = JSON.parse(document.getElementById("TheJSONObject").innerHTML.trim());
alert(newobj.thing);
来自控制台的证明(CHROME):
console.log(document.getElementById("TheJSONObject").innerHTML)
{ "thing" : "thingvalue", "badthing" : "a <a href="http://www.google.com">link!</a>", "lastthing" : "lastthingvalue" }
问题: 有没有什么方法可以得到实际的原始内部 HTML 而无需 JS 试图像这样善待我,这样 JSON.parse() 就可以工作了?
那是完全不可能的。你有一个 <span>
,而不是 <script>
或任何其他被视为文字文本的东西,所以 "
和 "
之间没有区别。您需要首先对其进行正确编码;这可能意味着 HTML-encoding JSON-encoded 对象包含 HTML-encoded 输出值作为 HTML.
如果您无法修改该输出,最接近的可能是发出 (XHR) 请求并在实体完好无损的情况下手动解析它。