查找和替换以及WYSIWYG编辑器

时间:2009-02-19 11:48:10

标签: html text

我的问题如下:

我有一个专栏:ProductName。现在,这里输入的文本是从tinyMCE输入的,所以它有各种标签。用户希望能够对所有产品进行查找和替换,并且必须支持着色。

例如 - 假设这是ProductName的一部分:

  

其他文字.. <strong>text text <font color="#ff6600">colortext&reg;</font></strong> ..其他文字

现在,用户想要替换:

<font color="#ff6600">colortext&reg;</font>

原始名称中包含<strong>标记,因此它显示为粗体。因此用户将其变为粗体 - 现在他正在搜索的文本是:

<strong><font color="#ff6600">colortext&reg;</font></strong>

显然我不会找到它。还有空间的问题:在一个地方,它在另一个地方有一个空间而不是空间。

有没有办法克服这个问题?

4 个答案:

答案 0 :(得分:2)

从搜索文本中删除HTML标记,然后首先进行纯文本搜索。然后,逐个部分(即文本节点的文本节点),获取搜索文本部分的元素路径,并将它们与找到的文本中的对应部分进行比较。如果所有部件的路径都匹配,那么就完成了。

编辑:通过路径,我的意思是类似于XPath,或者是TinyMCE编辑器的路径概念。示例:搜索文本的纯文本部分是“colortext&amp; reg;”。搜索文本中此文本节点的路径为<strong>/<font color="#ff6600">。在文本正文中搜索相同的纯文本(平凡),并获取它的路径,也是<strong>/<font color="#ff6600">。 (将其与“其他文本...”的路径进行比较,即/和“文本文本”,即<strong>。)这两条路径是相同的,所以这是一个真实的比赛。如果你有一个DOM树表示,确定路径应该不困难。

答案 1 :(得分:1)

如果它是有效的XML,那么XSLT对于这种练习来说是微不足道的。 使用标识模板,然后添加XPath以查找所需的特定节点:

<xsl:template match="//strong/font">
    <xsl:copy>
        <!-- Insert the replacement text here -->
    </xsl:copy>
</xsl:template>

使用XML时,这将是一个可维护,可扩展的解决方案。

答案 2 :(得分:1)

你要求几个相关但不连续的能力:

  • 搜索和替换内容
  • 搜索和替换格式
  • 搜索和替换类似的(即忽略空白中的微不足道)

你应该采取步骤 - 否则它会变得势不可挡,单个搜索算法将无法在不费力的情况下完成所有三个,并导致难以维护代码。

首先,看看类似的问题。进行忽略空格和大小写的搜索。你可能想要进入Lucene或其他搜索引擎技术,如果你还需要处理“碗”与“碗”和“智能”与“智能” - 虽然我希望这超出你当前的需要。

一旦你有了这个工作,它就会成为你搜索堆栈中的一层。

其次,查看格式化搜索。这通常使用令牌或标签来完成 - 您已经以HTML的形式使用了令牌或标签。但是,您必须能够不按顺序处理事情 - 因此<b><i>text</i></b>需要捕获<i><b>text</b></i>以及标记未正确嵌套的格式错误的表示,例如{{} 1}}。

其中一种方法是预解析字符串并将格式样式应用于每个字符。因此,您可以使用粗体和斜体,大胆和斜体等等,以便更轻松,更快速地使用哈希来表示样式组合 - 阅读第一个字符,找出它的样式(跟踪打开和关闭这种转换样式并找到标签)如果它已经存在于散列中,则将该散列号分配给该字母。如果没有,请获取新的哈希值并指定它。

现在,您可以将字母及其样式哈希与搜索进行比较,并获取格式和内容匹配。在你的相似匹配之上堆叠,你就拥有了所需的东西。

- 亚当

答案 3 :(得分:-1)

不确定理解你所说的一切,但使用正则表达式似乎是克服你所讨论的问题的好方法。