当从数据属性读取JSON时,HTML实体转换为其字符值

时间:2018-03-20 20:29:11

标签: javascript json custom-data-attribute

我试图访问数据属性中的字符串化JSON数组。但是,当我使用$(...).data('whatever')$(...).attr('data-whatever')获取值时,JSON内容中的HTML实体(例如")会转换为其字符表示形式(例如")这会导致JSON字符串在解析时被误解。

例如,如果我的数据属性的值为["Oberlin City Club: Opera Preview","Documentary Screening "Still Dreaming: Frances Walker at 93""],则使用$(...).data()读取此值将返回["Oberlin City Club: Opera Preview","Documentary Screening "Still Dreaming: Frances Walker at 93""]。为什么JavaScript会将"转换为"?如何在不将"转换为"的情况下阅读数据属性?



console.log($('div').attr('data-titles'));
console.log(JSON.parse($('div').attr('data-titles')));

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-titles='["Oberlin City Club: Opera Preview","Documentary Screening &quot;Still Dreaming: Frances Walker at 93&quot;"]'></div>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:2)

  

为什么JavaScript会将&quot;转换为&#34;?

在这种情况下,它没有。通过在您的响应中使用&quot;,浏览器会将其解析为",并将其放入属性中。这是因为你使用了一个html实体。

  

HTML实体是一段文本(&#34;字符串&#34;),以&符号(&amp;)开头,以分号(;)Entity MDN

结尾

因此,JavaScript无法解决这种情况。您需要找出一种在模板引擎中以不同方式呈现&quot;的方法,最好使用&amp;quot;对引号进行双重编码(如@Barmar in comments所述)。