2015-03-17 5 views
2

Я говорю о содержимом из контента, содержащего контент, и цель - это тот же контент-доступный div. Поэтому никаких внешних программ не было.Хром вставляет неразрывные пробелы в скопированном и вставленном содержимом

Структура HTML в этом div состоит в том, что каждое отдельное слово находится внутри пролета с некоторыми данными, которые нам нужно отслеживать. Затем пробелы оставляются в виде текстовых узлов между пролетами. Это работает отлично по большей части (выворачивайте новые строки), но я столкнулся с какой-то странной проблемой при копировании и вставке.

Chrome превращает этот

<span attrs="stuff">word</span> <span attrs="stuff">another</span> 

в это:

<span attrs="stuff">word&nbsp;</span><span attrs="stuff">another</span> 

или это:

<span attrs="stuff">word</span><span style="line-height: 16.79999">&nbsp;</span><span attrs="stuff">another</span> 

Это, очевидно, означает, что, если копия пользователя и пасты более одной линии, то форматирование полностью закручивается, а содержимое диапазона изменяется, что делает недействительными наши данные что нам нужно отслеживать.

Основная проблема заключается в том, что другие вещи в div могут содержать неразрывные пробелы по реальным причинам, поэтому, если я в глобальном масштабе начнет их заменять, я могу сломать это.

Для моих пространств с моими attrs, я знаю, что должно быть в них, поэтому легко вырезать неразрывные пробелы и восстановить их так, как должно быть. Но для этих странных пространств с нечетной высотой линии я понятия не имею, как их очистить, не зря все.

Прямо сейчас, я раздели все вставленные пролеты, которые содержат просто неразрывное пространство. Но мне бы очень хотелось либо остановить Chrome от этого в первую очередь, либо недвусмысленное средство для определения проблемных дополнительных интервалов, чтобы я мог их очистить в безопасности, не нарушая каких-либо подобных пространств, которые существуют по реальным причинам. Я мог бы использовать эту странную линейную высоту, я думаю, но это довольно хрупкое и небезопасное ощущение.

Как я могу предотвратить появление зон или идентифицировать их однозначно?

+0

У вас есть пример, который вы можете отправить?Я не совсем понимаю, что вы пытаетесь сделать. Вы анализируете контент-контент div и обертывающие слова с помощью тегов ? – Yoink

+0

делает [html encode/decode] (http://stackoverflow.com/a/1219983/724913) решить вашу проблему – arkoak

+0

@Yoink: Нет, я вставил контент через JS в div. Затем пользователь копирует и вставляет его. Это богатый текстовый блок, поэтому он может содержать довольно много странных вещей, которые пользователь может попытаться скопировать и вставить, так что я не могу делать предположения о том, что происходит, если оно не было специально помечено как мое. – Puppy

ответ

0

Проблема не только в Chrome. Все время, когда вы копируете код HTML, что-то подобное может произойти.

Вот почему вы можете использовать такие редакторы, как CKEditor. У них есть расширенные методы фильтрации, чтобы удалить такой плохой код HTML.

Я рекомендую использовать программу с буфером обмена, чтобы увидеть, как HTML код при копировании из разных мест: https://softwarerecs.stackexchange.com/questions/17710/see-clipboard-contents-hex-text

Но реализации этого самостоятельно было бы пустой тратой времени, на мой взгляд.

CKEditor можно настроить очень хорошо, чтобы предотвратить плохой код HTML.

Последние версии CKEditor имеют очень сложный подход к фильтрации контента. Он называется «Advanced Content Filter».

В основном «Расширенный фильтр содержимого» означает: весь HTML-код обрабатывается или проверяется. В случае, если нет правила, которое соответствует данному HTML-коду, оно отфильтровывается.

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