我需要能够将格式化的HTML存储在数据属性中,稍后由jQuery以两种格式提取:
使用我的PHP,我可以像这样存储HTML:
echo '<li data-desc="'. htmlspecialchars($myHTMLdescription) .'" class="myTerm">'. stripslashes($myItem) .'</li>';
后来我用JS来获取值:
$(document).on('click', '.myTerm', function() {
var thisTerm = $(this).text();
var description = $(this).attr('data-desc');
var descNoHTML = description.text();
});
如果文本中有链接等HTML元素,那么descNoHTML似乎会破坏代码。
答案 0 :(得分:0)
使用js
解码编码的字符串function decodeEntities(encodedString) {
var textArea = document.createElement('textarea');
textArea.innerHTML = encodedString;
return textArea.value;
}
$(document).on('click', '.myTerm', function() {
var thisTerm = $(this).text();
var description = $(this).attr('data-desc');
description = decodeEntities(description );
var descNoHTML = description.text();
});
在直接询问任何问题之前,您应该尝试搜索相同的问题。你的问题可能有答案。我认为this link对您有所帮助。
答案 1 :(得分:0)
尝试:
var descNoHTML = $(description).text();
答案 2 :(得分:0)
htmlspecialchars
用于转义HTML主要部分中的字符。例如,<
,>
和&
是HTML中的特殊字符。它们可以分别以<
,>
和&
转义。
但属性的双引号是一个完全不同的环境。 <>&
不是特殊字符。唯一的特殊字符是"
。见https://www.w3.org/TR/html-markup/syntax.html#syntax-attributes。实际上我直到现在还没有意识到你无法逃避双引号,但这就是规范所说的。因此,如果你想要正确地做到这一点,你必须使用你选择的编码自己逃避它们,然后在你阅读属性时将它们取消它们。
我们无法将\"
用于"
,因为根本不允许使用"
。我们将"
编码为%q
。然后%
是一个特殊字符,所以我们将其编码为%p
。那么你的PHP系列就变成了:
$myEscapedHTMLdescription = str_replace(array('%', '"'), array('%p', '%q'), $myHTMLdescription);
echo '<li data-desc="'. $myEscapedHTMLdescription .'" class="myTerm">'. stripslashes($myItem) .'</li>';
见http://php.net/manual/en/function.str-replace.php。然后在javascript中你必须解码它:
var description = $(this).attr('data-desc')
.replace(/%q/g, '"')
.replace(/%p/g, '%');
这大部分未经测试(我这里没有安装PHP),因此可能存在拼写错误。