Как заменить слова, содержащие теги HTML, не теряя теги HTML? - PullRequest
1 голос
/ 22 февраля 2012

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

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

Моя проблема в том, что я могу обрабатывать любую разметку, которая может быть внутри слова. (Потому что пользователям нельзя доверять)

Например, если я захочу заменить слово типа "какое-то слово ", мне придется каким-то образом обработать тег some<b>word</b>. Наверное, так ...

некоторые слово -> myreplacement
итак mewo rd -> myreplacement
немного слово -> myreplacement
так mewo rd -> myreplacement

<b>some</b>word        -> <b>myreplacement</b>
so<b>mewo</b>rd        -> myreplacement
some<b>word</b>        -> myreplacement<b></b>
<b>so<i>mewo</b>rd</i> -> <b>myreplacement</b><i></i>

Но мне все равно, если это не уничтожит форматирование абзаца.

Является ли построение парсера моим единственным вариантом?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2012

То, что вы ищете, это что-то вроде плагина search / replace-plugin, который поставляется с tinymce. Посмотрите на исходный код этого небольшого плагина, и вы обнаружите, что вы можете использовать функции поиска и замены этого плагина и для своего сценария.

0 голосов
/ 22 февраля 2012

Я бы использовал HTML Purifier для тяжелой и важной работы.

Затем, чтобы получить отдельные слова, я бы разбил содержимое там, где есть пробел.

После этого вы можете захотеть использовать регулярное выражение, чтобы получить теги от начала и до конца строки.

А затем примените функцию strip_tags, чтобы удалить оставшиеся теги в середине слова.

Наконец, у вас есть «голое» слово, чтобы применить слово «замена». Если замена не требуется, вы можете легко остаться с оригинальной строкой. В противном случае ...

Далее вы можете вернуть начальный и конечный теги.

Если вы хотите вернуть теги посередине, вам нужно будет захватить их в фазе «strip_tags» (возможно, используя regex вместо strip_tags, или, возможно, сравнив результат strip_tags с исходной строкой, в этой фазе) , Вам нужно будет расположить эти теги после замененного слова или перед ним.

Соединение частей слова вместе - это еще одна легкая часть.

...