我创建的文本是使用CKeditor创建的,它似乎是在
处插入空格。并且似乎使用>,<,&等进行类似的转换,这很好,除了当我进行DOMSelection时,这些代码被删除。
所以,这就是所选择的:
before<a href=\"http://wiki.teamliquid.net/starcraft2/Hatchery\" style=\"text-decoration: none; color: rgb(0, 43, 184); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: initial initial; background-repeat: initial initial; \" title=\"Hatchery\">Hatchery</a> (2)
但这实际上是DOM中的内容:
before<a href=\"http://wiki.teamliquid.net/starcraft2/Hatchery\" style=\"text-decoration: none; color: rgb(0, 43, 184); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: initial initial; background-repeat: initial initial; \" title=\"Hatchery\">Hatchery</a> (2)
请注意,我使用variable.inspect输出了选择内容和存储在数据库中的原始文本,因此所有引号都被转义(它们在发送到浏览器时不会被发送)。
为了节省每个人寻找差异的痛苦:
从第一个开始:Hatchery</a> (2)
(选择)
从第二个开始:Hatchery</a> (2)
(原文)
这些差异正处于选择的最后阶段。
所以......我可以通过三种方式来解决这个问题。
1) - Replace all characters commonly replaced with codes with their codes,
and hope for the best.
2) - Javascript may have some uncommon function / a library may exist that
replaces these characters for me (I think this might be the way CKeditor
does its character conversion).
3) - Figure out the way CKeditor converts and do the conversion exactly that way.
我正在使用Ruby on Rails,但这对于这个问题无关紧要。
我发现它转化的其他一些事情:
1: It seems to only convert spaces to if the space(s) is before or after a tag:
e.g.: "With quick <a href..."
2: It changes apostrophes to the hex value
e.g.: "opponent's"
3: It changes "&" to "&"
4: It changes angle brackets to ">" and "<" appropriately.
有没有人对此有任何想法?
答案 0 :(得分:1)
要对str
中的html实体进行编码(如果我理解正确,您的问题标题会询问此问题):
$('<div/>').text(str).html();
解码str
中的html实体:
$('<div/>').html(str).text();
这些依赖于jQuery,但香草的替代品基本相同但更冗长。
在str
中编码html实体:
var el = document.createElement('div');
el.innerText = str;
el.innerHTML;
解码str
中的html实体:
var el = document.createElement('div');
el.innerHTML = str;
el.innerText;
答案 1 :(得分:1)