我需要为每个链接显示动态一些带有Java脚本(jQuery)的文本。问题是文本也被格式化为HTML,因此这会在后面的视图中引起一些问题。 现在我将它存储在ID属性中,这是有效的,但只是没有嵌入HTML。
<?php
...
$desc = '<p style="color: red">some <span>data</span></p>';
echo '<a href="#" id="' . $desc . '">' . $key . '</a>';
?>
不允许Ajax请求。有没有一种简单的方法来实现这一目标?
答案 0 :(得分:13)
id
属性是最不合适的地方之一(必须是唯一的,不能包含所有字符)。使用data-
属性(在HTML5中引入,但也适用于旧浏览器而不使用HTML5 doctype):
<a href="#" data-desc="....">
如果您使用的是jQuery,可以通过.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>';
答案 1 :(得分:1)
其他评论绝对正确。不要这样做。在id
属性中添加除某种标识符之外的任何内容都是不合适的。
话虽这么说,我想我会告诉你为什么你的代码失败了。在尝试按预期使用之前,您需要对数据使用htmlspecialchars()
。这样,HTML将不会被解释为HTML ...将转换所有HTML实体,因此您的属性值将被解释为文本。 <
变为<
,>
变为>
,依此类推。如果您稍后将值拉出(使用jQuery或其他),您将获得预期的文本。