是否有一个javascript函数将字符转换为&代码;当量?

时间:2011-12-01 23:41:13

标签: javascript jquery ckeditor

我创建的文本是使用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>&nbsp;(2)

请注意,我使用variable.inspect输出了选择内容和存储在数据库中的原始文本,因此所有引号都被转义(它们在发送到浏览器时不会被发送)。


为了节省每个人寻找差异的痛苦:
从第一个开始:Hatchery</a> (2) (选择)
从第二个开始:Hatchery</a>&nbsp;(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 &nbsp; if the space(s) is before or after a tag:
   e.g.: "With quick&nbsp;<a href..."
2: It changes apostrophes to the hex value
   e.g.: "opponent&#39;s"
3: It changes "&" to "&amp;"
4: It changes angle brackets to "&gt;" and "&lt;" appropriately.

有没有人对此有任何想法?

2 个答案:

答案 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)

  1. 将空格转换为&amp; nbsp;通常由浏览器在编辑内容时完成。
  2. 转换为'&amp;#39;可以使用http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.entities_additional
  3. 进行控制 通常需要
  4. 和4.以避免破坏在再次加载该内容时在设计视图中编写的代码。您可以尝试更改http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.basicEntities,但这通常会在将来导致问题。