2012-07-04 7 views
4

У меня есть div contentEditable, в котором я должен разрешить пользователю редактировать HTML.HTML внутри contenteditable div

Нужно ли мне дезинфицировать HTML-файл, который пользователь пишет внутри этого div?

Я имею в виду, когда я извлекаю HTML из этого div, он уже дезинфицирован. Например, если я написал что-то вроде <> внутри div, а затем вернул его обратно, я получил бы &lt;&gt;.

Попробуй здесь: http://jsfiddle.net/mByWT/

Мой другой вопрос: не является ли такое поведение является стандартом, и я могу полагаться на него во всех браузерах?

EDIT

теперь я могу сделать вывод, что это общая картина:

  • element.innerHTML возвращается спасся HTML - это ускользает <, > драм &, но не цитаты
  • element.innerText и element.textContent возвращать литерал HTML без выхода

Смотреть это: http://jsfiddle.net/2CmjG/

ответ

2

Думаю, что вы сами ответили :). Факт, что innerHTML контента, пригодного для контента, возвращает кодированный HTML-код. В противном случае, набрав < или > или &nbsp; или другие специальные объекты HTML, этот редактор нарушит.

Тем не менее, я уверен, что есть крайние случаи, для которых браузеры будут создавать разные результаты и данные, созданные напр. IE не будет действителен на Fx. Но я никогда не видел ничего критического. Вы также не сможете кодировать данные, указанные в innerHTML, потому что это было бы очень сложно.

1

JQuery построен, чтобы быть совместимым со всеми браузерами, если вы использовали свой код во всех браузерах, это будет преформ таким же образом.

Однако вы хотели бы дезинформировать свой HTML, поскольку такие символы, как < и >, могут запутать javascript. Вы хотите еще больше очистить HTML, если это будет база данных или что-то в этом роде.

+1

Использование 'text()' вместо 'html()' делает WRONG вещь - возвращает '<>' для '<>' NOT '< >' – treecoder

+0

Извините, я думал, что ваш вопрос был почему он возвращал коды символов, а не текст. – Polyov

Смежные вопросы