【发布时间】:2013-09-15 03:43:51
【问题描述】:
是否可以使用 fn:contains 搜索 DOMDocument 对象并仅在单词完全匹配时返回 true?
我有一个文本替换 sn-p,它不是我自己编写的,它对关键字进行内部链接替换。但正如所写,它也替换了部分单词而不是仅替换完整单词。
这里是sn-p:
$autolinks = $this->config->get('autolinks');
if (isset($autolinks) && (strpos($this->data['description'], 'iframe') == false)
&& (strpos($this->data['description'], 'object') == false)):
$xdescription = mb_convert_encoding(html_entity_decode($this->data['description'], ENT_COMPAT, "UTF-8"), 'HTML-ENTITIES', "UTF-8");
libxml_use_internal_errors(true);
$dom = new DOMDocument;
$dom->loadHTML('<div>'.$xdescription.'</div>');
libxml_use_internal_errors(false);
$xpath = new DOMXPath($dom);
foreach ($autolinks as $autolink):
$keyword = $autolink['keyword'];
$xlink = mb_convert_encoding(html_entity_decode($autolink['link'], ENT_COMPAT, "UTF-8"), 'HTML-ENTITIES', "UTF-8");
$target = $autolink['target'];
$tooltip = isset($autolink['tooltip']);
$pTexts = $xpath->query(
sprintf('///text()[contains(., "%s")]', $keyword)
);
foreach ($pTexts as $pText):
$this->parseText($pText, $keyword, $dom, $xlink, $target, $tooltip);
endforeach;
endforeach;
$this->data['description'] = $dom->saveXML($dom->documentElement);
endif;
例如:
如果我的关键字是“massage”*massage*r 部分匹配并转换为链接,此时只应转换整个词按摩,而不是按摩器。
【问题讨论】:
-
示例 xml 会很有用。您有哪些输入会产生错误的输出?您想要更改的输入是什么?
-
对不起,我不明白你在问什么。我需要知道如何仅在上面的
$xpath->query(sprintf('///text()[contains(., "%s")]', $keyword));部分中匹配整个单词。正如我所说,输入 ie:$keyword变量将是“massage”,错误的输出是“massager”这个词只链接在“massager”这个词上,而结尾“r”作为纯文本保持未链接。 “massager”这个词根本不应该匹配,因为它不是确切的关键字。 -
xml 节点中的按摩
这是一个包含单词按摩的句子。 匹配吗?或者是massage 形式的所有匹配项 -
是的,
$this->data['description']是一个文本块,一个产品的描述。所以是的,<Tagname>This is a sentence containing the word massage.</Tagname>是匹配的,但目前<Tagname>This is a sentence containing the word massager.</Tagname>也是如此,这是我想要消除的。