<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="如何实现PHP关键词替换的类(避免重复替换，保留与还原原始链接)" id="card1">
<p> 游客</p><p>
标题:如何实现PHP关键词替换的类(避免重复替换，保留与还原原始链接)<br/>
正文:<br/>
php关键词替换的类(避免重复替换，保留与还原原始链接)本节主要内容：一个关键词替换的类主要可以用于关键词过滤，或关键词查找替换方面。实现过程分析：关键词替换，其实就是一个str_replace()的过程，如果是单纯的str_replace面对10W的关键词，1W字的文章也只需要2秒左右。问题所在：关键词替换了不只一次，比如a需要替换成&amp;lt;a&amp;gt;a&amp;lt;/a&amp;gt;，但结果可能是&amp;lt;a&amp;gt;&amp;lt;a&amp;gt;a&amp;lt;/a&amp;gt;&amp;lt;/a&amp;gt;等这样。为此，需要一个方法保护好已经替换了的标签，那么在处理文章之前，就先把标签替换掉比如[_tnum_]在文章处理好了以后再把它还原。另外一个问题，如果关键字或文章中有[_tnum_]本身怎么办，那么就需要排除这种这里就不能使用str_replace了而需要用到preg_replace用正则来排除。第三个问题，如果有两个关键字a和ab怎么办，希望先把长的匹配掉，短后匹配，这样就需要在匹配前先排序。最后一个问题，当str_replace改成了preg_replace以后，变慢了同样一段话10W次匹配要5秒钟，字符串处理的函数中strpos要快一些，那么先用strpos找出关键词即可，10W次查询还不到1秒。就算是100万才道8秒多。一个关键词匹配替换的类，代码：代码示例:&amp;lt;?php /*   * 关键词匹配类  * @author ylx &amp;lt;ylx@gmail.com&amp;gt;  * @packet mipang  * 使用实例  * $str = &amp;quot;绿壳蛋鸡撒范德萨下一年，下一年的洒落开房间卢卡斯地方军&amp;quot;;  * $key = new KeyReplace($str,array(&amp;quot;xxxx&amp;quot;=&amp;gt;&amp;quot;sadf&amp;quot;,&amp;quot;下一年&amp;quot;=&amp;gt;'http://baidu.com',&amp;quot;下一年&amp;quot;=&amp;gt;'google.com'));  * echo $key-&amp;gt;getResultText();  * echo $key-&amp;gt;getRuntime();  */class KeyReplace{ private $keys = array(); private $text = &amp;quot;&amp;quot;<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2225&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2225&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2225&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2225&amp;Page=3">[3]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2225&amp;Page=6">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=2225">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=2225">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>