PHP正则表达式替换站点关键字链接后空白的解决方法


Posted in PHP onSeptember 16, 2014

标题这样不知道合适不合适。具体的情况是这样的:网站要增加关键字链接功能,然后需要对文章的内容进行正则表达式匹配并替换,然后使用了preg_replace函数。替换的程序代码如下:

function ReplaceKeyword($linkDefs,$content){
$linkMap = array();

/*foreach($linkDefs as $row) {
$linkMap[] = explode(',', $row);
}*/
$linkMap = $linkDefs;

//把原有的链接替换成文字
foreach($linkMap as $row) {
$content = preg_replace('/(<a.*?>\s*)('.$row[0].')(\s*<\/a>)/sui', $row[0], $content);
}

//关键字从长至短排序
usort($linkMap, '_sortDesc');
//var_dump($linkMap);

$tmpKwds = array(); //存放暂时被替换的子关键字

$k_count=0;
foreach($linkMap as $i=>$row) {
list($kwd, $url) = $row;
for($j=$i+1; $j<count($linkMap); $j++) {
$subKwd = $linkMap[$j][0];
//如果包含其他关键字,暂时替换成其他字符串,如 茶叶 变成 
if(strpos($kwd, $subKwd) !== false) {
$tmpKwd = '';
$kwd = str_replace($subKwd, $tmpKwd, $kwd);
$tmpKwds[$tmpKwd] = $subKwd;
}
}
//把文字替换成链接
require(MLEINC.'/config/globals.config.php');
$th_num = $config['keyword_num']; //关键字替换次数
$content = preg_replace('/('.$row[0].')/sui', '<a href="'.$row[1].'">'.$kwd.'</a>', $content, $th_num ,$count); // 所有的匹配项都会被替换
$k_count+=$count;
}

//把代替子关键字的字符串替换回来
foreach($tmpKwds as $tmp=>$kwd) {
$content = str_replace($tmp, $kwd, $content);
}
$result = array($content,$k_count);

return $result;
unset($result);
unset($tmp);
unset($tmpKwds);
unset($kwd);
unset($count);
unset($config);
unset($linkMap);
unset($linkDefs);
unset($tmpKwd);
unset($content);
unset($th_num);
unset($row);
unset($k_count);
}

程序是从网上找的,然后在本地测试是正常的,本地环境为php 5.3 服务是5.2的,上传到网上去后,提交则显示空白,一开始考虑是PHP版本问题,以为是ereg preg的区别,替换后还是不行。后来网上看,发现有网友说调整大pcre.backtrack_limit和pcre.recursion_limit就行,我试了下,果然可以了。看来是配置问题,不过一般情况下,PHP的默认配置应该没啥问题,我自己写的这程序还是不够好!

PHP 相关文章推荐
社区(php&amp;&amp;mysql)一
Oct 09 PHP
shopex中集成的站长统计功能的代码简单分析
Aug 11 PHP
PHP关联链接常用代码
Nov 05 PHP
PHP基础教程(php入门基础教程)一些code代码
Jan 06 PHP
php获取URL中带#号等特殊符号参数的解决方法
Sep 02 PHP
PHP使用flock实现文件加锁的方法
Jul 01 PHP
php curl模拟post请求和提交多维数组的示例代码
Nov 19 PHP
php+redis实现商城秒杀功能
Nov 19 PHP
PHP实现防止表单重复提交功能【基于token验证】
May 24 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
Aug 17 PHP
php如何利用pecl安装mongodb扩展详解
Jan 09 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
May 27 PHP
一个php生成16位随机数的代码(两种方法)
Sep 16 #PHP
php数组中删除元素之重新索引的方法
Sep 16 #PHP
异步加载技术实现当滚动条到最底部的瀑布流效果
Sep 16 #PHP
PHP+iFrame实现页面无需刷新的异步文件上传
Sep 16 #PHP
PHP使用静态方法的几个注意事项
Sep 16 #PHP
PHP处理JSON字符串key缺少双引号的解决方法
Sep 16 #PHP
php中使用PHPExcel读写excel(xls)文件的方法
Sep 15 #PHP
You might like
php下连接mssql2005的代码
2011/01/17 PHP
PHP中功能强大却很少使用的函数实例小结
2016/11/10 PHP
PHP设计模式之建造者模式定义与用法简单示例
2018/08/13 PHP
javascript实现划词标记+划词搜索功能
2007/03/06 Javascript
用js实现随机返回数组的一个元素
2007/08/13 Javascript
JavaScript 动态创建VML的方法
2009/10/14 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
JQuery中操作Css样式的方法
2014/02/12 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
2014/03/05 Javascript
js调试工具console.log()方法查看js代码的执行情况
2014/08/08 Javascript
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
JavaScript实现定时隐藏与显示图片的方法
2015/08/06 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
原生js实现淘宝放大镜效果
2020/10/28 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
在Python的Tornado框架中实现简单的在线代理的教程
2015/05/02 Python
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
Python如何实现定时器功能
2020/05/28 Python
Python的控制结构之For、While、If循环问题
2020/06/30 Python
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
canvas像素点操作之视频绿幕抠图
2018/09/11 HTML / CSS
canvas实现手机的手势解锁的步骤详细
2020/03/16 HTML / CSS
倡议书范文
2014/04/16 职场文书
教研处工作方案
2014/05/26 职场文书
县政府领导班子四风问题对照检查材料思想汇报
2014/09/26 职场文书
玄武湖导游词
2015/02/05 职场文书
行政二审代理词
2015/05/25 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书
python tqdm用法及实例详解
2021/06/16 Python