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实现小型站点广告管理(修正版)
Oct 09 PHP
非常好的php目录导航文件代码
Oct 09 PHP
解析PHP处理换行符的问题 \r\n
Jun 13 PHP
php 不使用js实现页面跳转
Feb 11 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
Mar 17 PHP
8个PHP程序员常用的功能汇总
Dec 18 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
Sep 22 PHP
Zend Framework实现将session存储在memcache中的方法
Mar 22 PHP
PHP数组编码gbk与utf8互相转换的两种方法
Sep 01 PHP
PHP如何获取当前主机、域名、网址、路径、端口等参数
Jun 09 PHP
PHP获取ttf格式文件字体名的方法示例
Mar 06 PHP
laravel入门知识点整理
Sep 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脚本[带参数]的方法
2010/01/22 PHP
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
详解PHP中websocket的使用方法
2016/09/15 PHP
用jQuery扩展自写的 UI导航
2010/01/13 Javascript
使用jquery获取网页中图片高度的两种方法
2013/09/26 Javascript
多种方法实现load加载完成后把图片一次性显示出来
2014/02/19 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
javascript实现的猜数小游戏完整实例代码
2016/05/10 Javascript
jQuery Ajax页面局部加载方法汇总
2016/06/02 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
浅谈Vue.js应用的四种AJAX请求数据模式
2017/08/30 Javascript
react 实现页面代码分割、按需加载的方法
2018/04/03 Javascript
vue 路由嵌套高亮问题的解决方法
2018/05/17 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
2019/07/29 Javascript
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
通过python实现弹窗广告拦截过程详解
2019/07/10 Python
三个python爬虫项目实例代码
2019/12/28 Python
Python中包的用法及安装
2020/02/11 Python
python对接ihuyi实现短信验证码发送
2020/05/10 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
德国滑雪和户外用品网上商店:XSPO
2019/10/30 全球购物
巴西本土电商平台:Americanas
2020/06/21 全球购物
开放系统互连参考模型
2016/06/29 面试题
使用C#编写创建一个线程的代码
2013/01/22 面试题
2014年父亲节活动方案
2014/03/06 职场文书
三分钟英语演讲稿
2014/04/24 职场文书
汽车广告策划方案
2014/05/31 职场文书
教师党员整改措施
2014/10/24 职场文书
小学班主任事迹材料
2014/12/17 职场文书
心理健康教育培训研修感言
2015/11/18 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
php 解析非标准json、非规范json
2021/04/01 PHP