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 相关文章推荐
分页显示Oracle数据库记录的类之二
Oct 09 PHP
php操作SVN版本服务器类代码
Nov 27 PHP
PHP学习笔记(一) 简单了解PHP
Aug 04 PHP
PHP扩展开发入门教程
Feb 26 PHP
PHP遍历数组的方法汇总
Apr 30 PHP
php结合正则获取字符串中数字
Jun 19 PHP
php使用Session和文件统计在线人数
Jul 04 PHP
PHP中set_include_path()函数相关用法分析
Jul 18 PHP
如何修改yii2.0自带的user表为其它的表
Aug 01 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
Jun 20 PHP
php输出文字乱码的解决方法
Oct 04 PHP
详解阿里云视频直播PHP-SDK接入教程
Jul 09 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学习教程之第2天
2008/06/15 PHP
几种有用的变型 PHP中循环语句的用法介绍
2012/01/30 PHP
php处理斐波那契数列非递归方法
2012/02/04 PHP
php检测用户是否用手机(Mobile)访问网站的类
2014/01/09 PHP
50个PHP程序性能优化的方法
2014/06/02 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
php实现微信发红包功能
2018/07/13 PHP
Yii框架通过请求组件处理get,post请求的方法分析
2019/09/03 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
2020/04/27 PHP
深入分析js中的constructor和prototype
2012/04/07 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
js+canvas绘制矩形的方法
2016/01/28 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
微信小程序swiper组件用法实例分析【附源码下载】
2017/12/07 Javascript
使用webpack搭建vue环境的教程详解
2019/12/31 Javascript
为react组件库添加typescript类型提示的方法
2020/06/15 Javascript
[01:53]2016完美“圣”典风云人物:Maybe专访
2016/12/05 DOTA
[52:14]VG vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[04:45]DOTA2-DPC中国联赛正赛 iG vs LBZS 赛后选手采访
2021/03/11 DOTA
优化Python代码使其加快作用域内的查找
2015/03/30 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
python图像处理模块Pillow的学习详解
2019/10/09 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
KIKO比利时官网:意大利彩妆品牌
2017/07/23 全球购物
教师自荐信范文
2013/12/09 职场文书
市场营销调查计划书
2014/05/02 职场文书
应届大学生自荐书
2014/06/17 职场文书
谢师宴答谢词
2015/01/05 职场文书
2015年营业员工作总结
2015/04/23 职场文书
三八节活动简报
2015/07/20 职场文书
2016年校长新年寄语
2015/08/17 职场文书
送给客户微信问候语!
2019/07/04 职场文书
使用pycharm运行flask应用程序的详细教程
2021/06/07 Python
CSS3实现指纹特效代码
2022/03/17 HTML / CSS