fn:contains を使用して DOMDocument オブジェクトを検索し、単語が完全に一致する場合にのみ true を返すことは可能ですか?
キーワードの内部リンク置換を行う、自分で書いていないテキスト置換スニペットがあります。しかし、書かれているように、完全な単語だけでなく、部分的な単語も置き換えます。
スニペットは次のとおりです。
$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;
例:
私のキーワードが「マッサージ」の場合 *マッサージ*r は部分的に一致し、リンクに変換されますが、単語全体のみが変換され、マッサージャーではありません。