Есть ли функция javascript, которая преобразует символы в код &; эквивалент? - PullRequest
5 голосов
/ 02 декабря 2011

У меня есть текст, созданный с помощью CKeditor , и кажется, что он вставляет &nbsp; там, где должны быть пробелы.И похоже, что он выполняет аналогичные преобразования с>, <, & и т. Д., Что хорошо, за исключением того, что когда я делаю DOMSelection, эти коды удаляются. </p>

Итак, это то, что выбрано:

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 ]

1 голос
/ 02 декабря 2011
  1. Преобразование пробелов в обычно выполняется браузером при редактировании содержимого.
  2. Преобразование «в» можно контролировать с помощью http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.entities_additional
  3. и 4. Обычно требуетсячтобы не нарушать код, написанный в режиме конструктора, при повторной загрузке этого содержимого.Вы можете попытаться изменить http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.basicEntities, но это обычно может привести к проблемам в будущем.
1 голос
/ 02 декабря 2011

Для кодирования html-сущностей в str (название вашего вопроса требует этого, если я правильно понимаю):

$('<div/>').text(str).html();

Для декодирования html-сущностей в str:

$('<div/>').html(str).text();

Они основаны на jQuery, но альтернативы ванили в основном те же, но более многословные.

Для кодирования html-сущностей в str:

var el = document.createElement('div');
el.innerText = str;
el.innerHTML;

Для декодирования html-сущностей в str:

var el = document.createElement('div');
el.innerHTML = str;
el.innerText;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...