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 相关文章推荐
SSI指令
Nov 25 PHP
ZF等常用php框架中存在的问题
Jan 10 PHP
浅析php过滤html字符串,防止SQL注入的方法
Jul 02 PHP
CI框架中通过hook的方式实现简单的权限控制
Jan 07 PHP
ThinkPHP项目分组配置方法分析
Mar 23 PHP
php $_SESSION会员登录实例分享
Jan 19 PHP
Yii2创建控制器(createController)方法详解
Jul 23 PHP
PHP PDOStatement::getColumnMeta讲解
Feb 01 PHP
PHP hex2bin()函数用法讲解
Feb 25 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 PHP
PHP基于openssl实现非对称加密代码实例
Jun 19 PHP
PHPstorm激活码2020年5月13日亲测有效
Sep 17 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
Mysql的常用命令
2006/10/09 PHP
用php过滤危险html代码的函数
2008/07/22 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
2011/06/23 PHP
PHP操作MongoDB GridFS 存储文件的详解
2013/06/20 PHP
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
2015/08/26 Javascript
在windows上用nodejs搭建静态文件服务器的简单方法
2016/08/11 NodeJs
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
2017/05/30 Javascript
基于jquery的on和click的区别详解
2018/01/15 jQuery
总结JavaScript在IE9之前版本中内存泄露问题
2018/04/28 Javascript
浅析vue-router原理
2018/10/19 Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
2019/02/21 Javascript
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
python client使用http post 到server端的代码
2013/02/10 Python
由Python运算π的值深入Python中科学计算的实现
2015/04/17 Python
python Flask实现restful api service
2017/12/04 Python
Python实现重建二叉树的三种方法详解
2018/06/23 Python
对python list 遍历删除的正确方法详解
2018/06/29 Python
Python中按值来获取指定的键
2019/03/04 Python
Python常见数字运算操作实例小结
2019/03/22 Python
python求最大值,不使用内置函数的实现方法
2019/07/09 Python
python实现socket+threading处理多连接的方法
2019/07/23 Python
通过python检测字符串的字母
2020/02/18 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
2020/09/26 Python
css3简单练习实现遨游浏览器logo的绘制
2013/01/30 HTML / CSS
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
餐厅总经理岗位职责
2013/12/31 职场文书
高中军训感言400字
2014/02/24 职场文书
2014年小学植树节活动方案
2014/03/02 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
小学美术教学反思
2016/02/17 职场文书
导游词之千岛湖
2019/09/23 职场文书
Nginx的反向代理实例详解
2021/03/31 Servers
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫