CSS内容中的HTML实体(在运行时将实体转换为escape-string)

时间:2014-07-17 12:59:41

标签: javascript css dom html-entities css-content

我知道像 öð这样的html实体不能在这样的css中使用:

div.test:before {
    content:"text with html-entities like ` ` or `ö` or `ð`";
} 

有一个很好的问题可以解决这个问题的好答案:Adding HTML entities using CSS content

但是我正在读取通过AJAX从服务器放入css-content的字符串。在用户客户端上运行的JavaScript接收带有嵌入式html实体的文本,并从中创建样式内容,而不是将其作为文本元素放入html元素的内容中。这种方法可以帮助那些试图通过复制和粘贴窃取我内容的小偷。不属于html文档(但是css-content的一部分)的文本真的很难复制。这种方法很好。这个html实体只有这个令人讨厌的问题。

所以我需要在运行时将html-entities转换为unicode转义序列。我可以在带有perl脚本的服务器上或在带有JavaScript的客户端上执行此操作,但我不想编写包含所有现有命名实体的完整列表的子例程。 html5中有超过2200个命名实体,如下所示:http://www.w3.org/TR/2011/WD-html5-20110113/named-character-references.html每次更改此列表时,我都不想更改子例程。 (数字实体没问题。)

使用javascript进行此转换是否有任何技巧?也许通过添加,读取和删除DOM的内容? (我正在使用jQuery)

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

var text = 'Text that contains html-entities';
var myDiv = document.createElement('div');
$(myDiv).html(text);
text = $(myDiv).text();
$('#id_of_a_style-element').html('#id_of_the_protected_div:before{content:"' + text + '"}');

撰写问题是得到这个答案的一半。我希望这个答案也可以帮助其他人。