我写了一个函数来查找关键字并将其转换为链接以下是整个函数:
function Linkkeywords($linksArray, $content){
$links = $linksArray;
$links_keys = array_keys($links);
$linked = array();
$existingLinks = array();
foreach ($links_keys as $word ){
if(!in_array($word, $existingLinks)){
$existingLinks[] = $word;
$linked[] = '<a href="'.$links[$word].'">'.$word.'</a>';
}
}
foreach($existingLinks as $key => $word){
$c = preg_replace('|(?!<[^<>]*?)(?<![?./&])\b('.$word.')\b(?!:)(?![^<>]*?>)|iu', $linked[$key], $content,1);
}
return $c;
}//End Function Linkkeywords
$linksArray = Array ( 'hello' => 'http://hello.com' );
$content = '
<div class="alert alert-post-summary">hello world</div>
hello world
';
echo Linkkeywords($linksArray, $content);
此函数的输出如下:
<div class="alert alert-post-summary"><a href="http://hello.com">hello</a> world</div>
hello world
我想忽略<div class="alert alert-post-summary">
我喜欢,该函数的输出如下:
<div class="alert alert-post-summary">hello world</div>
<a href="http://hello.com">hello</a> world
答案 0 :(得分:0)
如果要确保关键字不在HTML元素中,最简单的解决方案是使用DOMDocument来解析字符串。
可以如下创建DOMDocument实例:$doc = DOMDocument::loadHTML($content);
然后可以遍历Document子级: `
foreach ($document->childNodes() as $child) {
if ($child->nodeType === XML_TEXT_NODE)
$child->textContent = str_replace($word, $link, $child->textContent);
}
`
最后检索DOMDocument的textContent以获取您的字符串。 这将替换html字符串的每个直接文本子节点中的关键字。