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 excel reader读取excel内容存入数据库实现代码
Dec 06 PHP
php生成excel文件的简单方法
Feb 08 PHP
php实现水仙花数示例分享
Apr 03 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
Mar 05 PHP
Smarty模板引擎缓存机制详解
May 23 PHP
PHP发送AT指令实例代码
May 26 PHP
PHP读取文件的常见几种方法
Nov 03 PHP
详解yii2实现分库分表的方案与思路
Feb 03 PHP
php实现简单加入购物车功能
Mar 07 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
Aug 11 PHP
PHP中使用mpdf 导出PDF文件的实现方法
Oct 22 PHP
Yii框架安装简明教程
May 15 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中date()日期函数有关参数整理
2011/07/19 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
2013/04/26 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
2014/06/23 PHP
PHP使用mongoclient简单操作mongodb数据库示例
2019/02/08 PHP
基于PHP实现短信验证码发送次数限制
2020/07/11 PHP
phpwind放自动注册方法
2006/12/02 Javascript
用正则xmlHttp实现的偷(转)
2007/01/22 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
点击页面任何位置隐藏div的实现方法
2016/09/05 Javascript
nodejs中art-template模板语法的引入及冲突解决方案
2017/11/07 NodeJs
简述vue路由打开一个新的窗口的方法
2018/11/29 Javascript
微信小程序 wxParse插件显示视频问题
2019/09/27 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
2019/10/26 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
通过vue刷新左侧菜单栏操作
2020/08/06 Javascript
vue实现移动端触屏拖拽功能
2020/08/21 Javascript
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
python实现飞机大战游戏
2020/10/26 Python
pip install python 快速安装模块的教程图解
2019/10/08 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
美国购买当代和现代家具网站:MODTEMPO
2018/07/20 全球购物
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
武汉瑞得软件笔试题
2015/10/27 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
演讲稿怎么写才完美
2014/01/02 职场文书
实用的简历自我评价
2014/03/06 职场文书
科研课题实施方案
2014/03/18 职场文书
身边的榜样活动方案
2014/08/20 职场文书
幼儿园感恩节活动方案2014
2014/10/11 职场文书
公司会议开幕词
2015/01/29 职场文书
关于法制教育的宣传语
2015/07/13 职场文书
青年文明号创建口号大全
2015/12/25 职场文书
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js
Golang gRPC HTTP协议转换示例
2022/06/16 Golang
从原生JavaScript到React深入理解
2022/07/23 Javascript