<?php
$body = "<p>在过去的一年中,“抖音”通过短视频的形式在人们
<h1>抖音怎么改名字啊?</h1>
<img src='https://example.com/test.jpg' title='我想改名字'/></p>";
$keywords = [
['id'=>1,'title'=>'改名字','url'=>'https://www.example.com/gaimingzi.html'],
['id'=>2,'title'=>'名字','url'=>'https://www.example.com/mingzi.html'],
['id'=>3,'title'=>'短视频','url'=>'https://www.example.com/duanshipin.html'],
];
foreach ($keywords as $keyword)
{
$body = preg_replace('/(>[^<>]*?)(' . $keyword['title'] . ')([^<>]*?<)/', '$1<a href="'. $keyword['url']. '" target="_blank">$2</a>$3', $body,1);
}
echo $body;
在线预览
问题:在上面的DEMO中,"改名字"关键词 包含了 "名字"关键词,怎么以长的关键词为准,只替换长的关键词呢? PS:关键词是从tags数据库中查出来的,在添加文章的时候没有对关键词做处理,只是在文章详情页面做上述处理。