日期:2014-05-17  浏览次数:20391 次

php开发文章内链,替换规则的一个问题
做内链的方法,能想到的就是替换 设定好的内链词,比如把 “春节放假” 替换成 “<a href='###'>春节放假</a>”,等,这种方式来的

但是事实可能并没有这么简单,因为发过来的文章往往都是带有html标签的,比如可能是“<span color="XX">春节</span><b>放假</b>”这种形式的,这样改怎么样来替换?

想了下可能有下边的集中可能

“春节<span>放假</span>” 这种是要替换的  ,成这样 “<a href="#">春节<span>放假</span></a>” 

"<a href="#132132">春节放假</a>" 这种直接形式的不替换

“<a><span>春节</span>放假</a>” 这种隔标签形式的也不替换

“<a>春节</a>放假” 这种部分词语有链接的不替换

。。。可能还有替他的情况

用语言描述下,“每一个分词都不带链接的情况下才替换,链接可能是直接链接也可能是隔标签链接”

然后替换成 “多个分词共同的最近父节点内部,替换成新加好链接的新形式”。

这种匹配规则和替换规则还咋写都?求助
php seo 内链

------解决方案--------------------
你想的太复杂了,被html标记包裹的就不需要替换
因为标记可能已经被赋予特定意义,比如a标记就是连接
虽然你想的很复杂,但还有一处没考虑到(标记内的):
<a href='###' title='春节放假'>春节放假</a>
示例
$html = <<<html
这儿是茶叶的链接。
<img src="中国好茶叶.jpg" width="120" height="120" alt="中国好茶叶" />
<span title="中国好茶叶">中国茶叶</span>
这儿是中国茶叶大观的链接。
这儿是<a href="原有的链接.html">茶叶</a>的现有链接
html;
echo preg_replace('#(?=[^>]*(?=<(?!/a>)
------解决方案--------------------
$))茶叶#','<a href="新加的链接.html">\0</a>',$html);
得到

这儿是<a href="新加的链接.html">茶叶</a>的链接。
<img src="中国好茶叶.jpg" width="120" height="120" alt="中国好茶叶" />
<span title="中国好茶叶">中国<a href="新加的链接.html">茶叶</a></span>
这儿是中国<a href="新加的链接.html">茶叶</a>大观的链接。
这儿是<a href="原有的链接.html">茶叶</a>的现有链接