使用Javascript在HTML5数据属性中转义引号

rya*_*nve 30 javascript quotes jquery html5 escaping

我正在使用jQuery .data()来处理自定义HTML5数据属性,其中属性的值需要能够包含单引号和双引号:

<p class="example" data-example="She said "WTF" on last night's show.">
Run Code Online (Sandbox Code Playgroud)

我知道使用&quot;数据属性值中的字符代码可以使上述工作,但我不能总是控制值的输入方式.另外,我需要能够在标记中使用HTML标记,如下所示:

<p class="example" data-example="
She said "<abbr title="What The F***">WTF</abbr>" on last night's show.
">
Run Code Online (Sandbox Code Playgroud)

如果某种形式.replace()是答案,那么它需要在读取值之前完成 - .data()通过将它应用于整个<body>

正常的反斜杠逃逸<abbr title="te\'st">WTF</abbr>也不起作用.

理想情况下,这将具有以下两种方式的灵活性:

data-example="..."data-example='...'

但如果它只有一种可能,那么我至少可以用它.想法?

更新 - 更多上下文:

我正在为responsejs.com工作.实际的应用可能是只为某个宽度以上的浏览器加载侧边栏(并在浏览器而不是PHP中处理).例如,在WordPress的情况下,侧边栏可能包含小部件,图像等.PHP标签中的引号是非问题b/c它们在到达浏览器之前被解析为HTML.例:

<aside id="primary" class="sidebar" 

        data-oweb=' 

            <?php dynamic_sidebar( 'primary' ); ?>

        '
    >

    optional default markup for mobile and no-js browsers here

</aside>
Run Code Online (Sandbox Code Playgroud)

Guf*_*ffa 29

没有办法绕过它,你必须正确地转义值,否则无法正确解析HTML.在解析代码后,您无法使用Javascript来更正代码,因为它已经失败了.

使用正确HTML编码的示例如下:

<p class="example" data-example="She said &quot;&lt;abbr title=&quot;What The F***&quot;&gt;WTF&lt;/abbr&gt;&quot; on last night's show.">
Run Code Online (Sandbox Code Playgroud)

你不能使用反斜杠来转义字符,因为它不是Javascript代码.您使用HTML实体来转义HTML代码中的字符.

如果你无法控制数据的输入方式,那么你就搞砸了.你只需找到一种方法来控制它.

  • 使用`用htmlspecialchars()`和`ENT_QUOTES`打印它如``欲了解更多信息<PHP回声(用htmlspecialchars($ myvalue的,ENT_QUOTES))?>:http://php.net/manual/en/function.htmlspecialchars .PHP (5认同)

小智 10

使用encodeURI 转义 JSON 对象中的引号。使用decodeURI 解析字符串。

var popup = document.getElementById('popup'),
    msgObj = JSON.parse(decodeURI(popup.dataset.message));

console.log(msgObj);
Run Code Online (Sandbox Code Playgroud)
<a id="popup" href="#" data-message="%7B%22title%22:%22Print%22,%22message%22:%22Printing%20not%20yet%20implemented%22%7D" />
Run Code Online (Sandbox Code Playgroud)

  • 相当巧妙的解决方案。 (2认同)
  • 被低估的解决方案 - 这工作得很好 (2认同)

小智 5

当我使用 data 属性将一些数据与 html 元素一起从 PHP 传输到 JavaScript 时,我只base64_encode在后端使用,然后在客户端使用 base64Decode(input)来获取数据。这样我就可以避免任何逃避狂欢的事情。我使用的 JavasScript 代码位于此处http://www.webtoolkit.info/