4

我需要为每个链接动态显示一些带有 Java-Script (jQuery) 的文本。问题是文本也被格式化为 HTML,所以这会在后面的视图中造成一些问题。现在我将它存储在 ID 属性中,这是可行的,但只是没有嵌入 HTML。

<?php
...
$desc = '<p style="color: red">some <span>data</span></p>';
echo '<a href="#" id="' . $desc . '">' . $key . '</a>';
?>

不允许 Ajax 请求。有没有一种简单的方法可以达到这个目标?

4

2 回答 2

13

id属性是最不合适的地方之一(必须是唯一的,不能包含所有字符)。使用data-属性(在 HTML5 中引入,但也适用于旧浏览器且不使用 HTML5 文档类型):

<a href="#" data-desc="....">

如果您使用的是 jQuery,您可以通过 .js 访问它.data('desc'),在纯 JavaScript 中,最便携的方式是使用.getAttribute('data-desc'). 如果您不需要支持较旧的浏览器,则可以通过该.dataset.desc属性访问该值。

在任何情况下,您都需要确保在属性中插入动态数据时不会出现任何中断。用于htmlspecialchars()此目的:

$desc = '<p style="color: red">some <span>data</span></p>';
echo '<a href="#" data-desc="' . htmlspecialchars($desc) . '">' . $key . '</a>';
于 2012-06-17T17:49:43.727 回答
1

其他评论完全正确。不要这样做。除了某种标识符之外,在id属性中放置任何东西都是不合适的。

话虽如此,我想我会让你知道你的代码为什么会失败。htmlspecialchars()在尝试按预期使用数据之前,您需要先使用数据。这样,HTML 就不会被解释为 HTML……所有的 HTML 实体都将被转换为,所以你的属性值被解释为文本。 <变成&lt;>变成&gt;等等。如果您稍后提取值(使用 jQuery 或其他),您将获得预期的文本。

于 2012-06-17T17:51:18.050 回答