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 相关文章推荐
详细介绍:Apache+PHP+MySQL配置攻略
Sep 05 PHP
我用php+mysql写的留言本
Oct 09 PHP
Banner程序
Oct 09 PHP
PHP实现批量修改文件后缀名的方法
Jul 30 PHP
CI映射(加载)数据到view层的方法
Mar 28 PHP
php实现socket推送技术的示例
Dec 20 PHP
php识别翻转iphone拍摄的颠倒图片
May 17 PHP
PHP检查URL包含特定字符串实例方法
Feb 11 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
May 06 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
May 25 PHP
Laravel获取所有的数据库表及结构的方法
Oct 10 PHP
php实现通过stomp协议连接ActiveMQ操作示例
Feb 23 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之第六天
2006/10/09 PHP
修改ThinkPHP缓存为Memcache的方法
2014/06/25 PHP
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
PHP利用递归函数实现无限级分类的方法
2019/03/22 PHP
Laravel模糊查询区分大小写的实例
2019/09/29 PHP
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
2015/12/18 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
js随机生成26个大小写字母
2016/02/12 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
AngularJS指令详解及示例代码
2016/08/16 Javascript
Javascript使用SWFUpload进行多文件上传
2016/11/16 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
2017/07/22 jQuery
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
利用Console来Debug的10个高级技巧汇总
2018/03/26 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
vue实现下拉菜单树
2020/10/22 Javascript
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
Python中几种导入模块的方式总结
2017/04/27 Python
Python插件virtualenv搭建虚拟环境
2017/11/20 Python
PyQt5固定窗口大小的方法
2019/06/18 Python
Python 3.8 新功能来一波(大部分人都不知道)
2020/03/11 Python
python爬虫把url链接编码成gbk2312格式过程解析
2020/06/08 Python
pycharm 的Structure界面设置操作
2021/02/05 Python
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
大学四年的个人自我评价
2014/01/14 职场文书
相亲大会策划方案
2014/06/05 职场文书
2014年领导班子专项整治整改方案
2014/09/28 职场文书
技术股份合作协议书
2014/10/05 职场文书
上班迟到检讨书范文300字
2014/11/02 职场文书
机关单位保密工作责任书
2015/05/11 职场文书
运动员入场词
2015/07/18 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
话题作文之学会尊重
2019/12/16 职场文书
Win11 BitLocker 驱动器加密
2022/04/19 数码科技