Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 查找并替换所见即所得编辑器_Html_Text - Fatal编程技术网

Html 查找并替换所见即所得编辑器

Html 查找并替换所见即所得编辑器,html,text,Html,Text,我的问题如下: 我有一个专栏:ProductName。现在,这里输入的文本是从tinyMCE输入的,因此它有各种各样的标记。用户希望能够对所有产品进行查找和替换,并且必须支持着色 例如,假设这是ProductName的一部分: 其他文本文本颜色文本®。其他文本 现在,用户希望替换: <font color="#ff6600">colortext&reg;</font> colortext®; 原始名称中有标记,因此显示为粗体。因此,用户将其设置为粗

我的问题如下:

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

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

其他文本<代码>文本颜色文本®。其他文本

现在,用户希望替换:

<font color="#ff6600">colortext&reg;</font>
colortext®;
原始名称中有
标记,因此显示为粗体。因此,用户将其设置为粗体-现在他正在搜索的文本是:

<strong><font color="#ff6600">colortext&reg;</font></strong>
彩色文本®
显然我找不到它了。另外还有空间的问题:在一个地方它有一个空间,在另一个地方它没有


有办法克服这个问题吗?

我不确定你说的每句话都能听懂,但是使用正则表达式似乎是解决你所说问题的好办法。

从搜索文本中去掉HTML标记,然后先进行纯文本搜索。然后,逐部分(即,逐文本节点的文本节点)获取搜索文本各部分的元素路径,并将其与找到的文本中的对应部分进行比较。如果所有零件的路径匹配,则完成


Edit:关于路径,我的意思类似于XPath,或者TinyMCE编辑器的路径概念。示例:搜索文本的纯文本部分是“colortext®;”。搜索文本中此文本节点的路径为
/
。在文本正文中搜索相同的纯文本(平凡),并选择它的路径,也就是
/
。(将其与“其他文本…”的路径(即
/
)和“文本”的路径(即
)进行比较)这两条路径相同,因此这是真正的匹配。如果您有一个DOM树表示,那么确定路径应该不难。

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

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


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

您需要几个相关但不连续的功能:

  • 搜索和替换内容
  • 搜索和替换格式
  • 搜索并替换相似的内容(即忽略空白中的细微差异)
您应该分步执行,否则它将变得势不可挡,一个单一的搜索算法将无法在不付出大量努力的情况下完成这三项任务,并导致代码维护困难

首先,看看类似的问题。进行忽略空格和大小写的搜索。如果你还需要处理“碗”对“碗”和“智能”对“智能”的问题,你可能想进入Lucene或其他搜索引擎技术领域——尽管我预计这超出了你当前的需要

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

其次,查看格式化搜索。这通常是使用令牌或标记来完成的,您已经以HTML的形式使用了这些令牌或标记。但是,您必须能够处理无序的事情-因此,在搜索
文本和格式错误的表示时,需要捕获
文本,其中标记没有正确嵌套,例如
文本

其中一种方法是预解析字符串并对每个字符应用格式样式。所以你会有一个粗体和斜体的t,一个粗体和斜体的e,等等。为了使这更容易和更快,使用散列来表示样式组合-读取第一个字符,找出它是什么样式(跟踪打开和关闭样式,然后找到标记),如果它已经存在于散列中,将该散列数指定给该字母。如果没有,则获取新的哈希数并分配它

现在,您可以将字母及其样式哈希与搜索进行比较,并获得格式和内容匹配。把它放在类似的匹配项上,你就得到了你需要的东西


-Adam

我需要一个例子。啊,现在他有两个问题。“以搜索文本部分的元素路径为例”我真的不明白你想说什么。你能举个简单的例子吗?