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中的 == 运算符进行字符串比较
Nov 26 PHP
?算你??的 PHP 程式大小
Dec 06 PHP
php循环输出数据库内容的代码
May 24 PHP
PHP迅雷、快车、旋风下载专用链转换代码
Jun 15 PHP
windwos下使用php连接oracle数据库的过程分享
May 26 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
Jun 19 PHP
PHP程序员不应该忽略的3点
Oct 09 PHP
分享五个PHP7性能优化提升技巧
Dec 07 PHP
Yii遍历行下每列数据的方法
Oct 17 PHP
PHP简单实现遍历目录下特定文件的方法小结
May 22 PHP
swoole_process实现进程池的方法示例
Oct 29 PHP
php生成HTML文件的类方法
Oct 11 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检测文本的编码
2015/07/26 PHP
PHP图像裁剪缩略裁切类源码及使用方法
2016/01/07 PHP
PHP中的Trait 特性及作用
2016/04/03 PHP
微信公众号开发之语音消息识别php代码
2016/08/08 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
基于 Swoole 的微信扫码登录功能实现代码
2018/01/15 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
如何在PHP中生成随机数
2020/06/04 PHP
Some tips of wmi scripting in jscript (1)
2007/04/03 Javascript
点击文章内容处弹出页面代码
2009/10/01 Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
JS检测图片大小的实例
2013/08/21 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
2015/08/21 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
2015/11/26 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
vue实现组件之间传值功能示例
2018/07/13 Javascript
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
js仿京东放大镜效果
2020/08/09 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
Python列表推导式的使用方法
2013/11/21 Python
使用python3.5仿微软记事本notepad
2016/06/15 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
Python OpenCV 使用滑动条来调整函数参数的方法
2019/07/08 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
深圳茁壮笔试题
2015/05/28 面试题
成人毕业生自我鉴定
2013/10/18 职场文书
自我鉴定范文
2013/11/10 职场文书
搞笑车尾标语
2014/06/23 职场文书
迎新生晚会主持词
2015/06/30 职场文书
2016年感恩教师节校园广播稿
2015/12/18 职场文书
pytorch 实现在测试的时候启用dropout
2021/05/27 Python
Mysql分析设计表主键为何不用uuid
2022/03/31 MySQL
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python