如何在不丢失HTML标记的情况下替换包含HTML标记的单词?

时间:2012-02-22 19:21:43

标签: javascript jquery tinymce string-parsing

我正在为我们在应用程序中使用的tinyMCE编辑器编写一个正确的拼写检查对话框。

我正处于确定所有单词替换的步骤,现在我需要将更改应用于textarea的innerHTML。

我对此的关注是能够处理可能在一个单词内的任何标记。 (因为用户不可信任)

例如,如果我想替换像“some word ”这样的单词,我将不得不处理&lt; b&gt;以某种方式标记some<b>word</b>。可能是这样......

一些字 - &gt; myreplacement
所以 mewo rd - &gt; myreplacement
一些单词 - &gt; myreplacement的
所以 mewo rd - &gt; 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 :(得分:0)

我会使用HTML Purifier进行繁重而重要的工作。

然后,为了得到分开的单词,我会打破有空格的内容。

在此之后,您可能希望使用正则表达式从字符串的开头和结尾抓取标记。

然后应用“strip_tags”函数删除单词中间的剩余标签。

最后,你有“裸”字来应用替换这个词。如果不需要更换,您可以轻松使用原始字符串。否则...

接下来,您可以放回开始和结束标记。

如果你想将标签放回中间,你必须在“strip_tags”阶段抓取它们(可能使用正则表达式而不是strip_tags,或者可能将strip_tags结果与原始字符串进行比较,在该阶段) 。您需要在替换后的单词之后或之前定位这些标记。

将单词拼接在一起也是另一个容易的部分。

答案 1 :(得分:0)

您正在寻找的是像tinymce附带的搜索/替换插件。看看这个小插件的源代码,你会发现你也可以在你的场景中使用这个插件的搜索和替换功能。