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 相关文章推荐
PHP4在WinXP下IIS和Apache2服务器上的安装实例
Oct 09 PHP
php面向对象全攻略 (十二) 抽象方法和抽象类
Sep 30 PHP
PHP 抓取网页图片并且另存为的实现代码
Mar 24 PHP
让php处理图片变得简单 基于gb库的图片处理类附实例代码下载
May 17 PHP
phpQuery占用内存过多的处理方法
Nov 13 PHP
PHP编译安装时常见错误解决办法
May 28 PHP
PHP准确取得服务器IP地址的方法
Jun 02 PHP
详谈PHP编码转换问题
Jul 28 PHP
php采集神器cURL使用方法详解
Feb 19 PHP
Yii数据模型中rules类验证器用法分析
Jul 15 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
Apr 15 PHP
php修改数组键名的方法示例
Apr 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
全国FM电台频率大全 - 16 河南省
2020/03/11 无线电
PHP Squid中可缓存的动态网页设计
2008/09/17 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
PHP中的事务使用实例
2015/05/26 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
2020/02/12 PHP
JQuery获取各种宽度、高度(format函数)实例
2013/03/04 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
2016/05/20 Javascript
全面了解构造函数继承关键apply call
2016/07/26 Javascript
全屏滚动插件fullPage.js使用实例解析
2016/10/21 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
微信小程序 textarea 组件详解及简单实例
2017/01/10 Javascript
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
Vue header组件开发详解
2018/01/26 Javascript
浅谈Node.js 沙箱环境
2018/05/15 Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
2018/09/18 Javascript
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
2020/02/05 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
Python处理RSS、ATOM模块FEEDPARSER介绍
2015/02/18 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
用于业余项目的8个优秀Python库
2018/09/21 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
python3+PyQt5 数据库编程--增删改实例
2019/06/17 Python
python global关键字的用法详解
2019/09/05 Python
Pandas时间序列:重采样及频率转换方式
2019/12/26 Python
浅析HTML5 meta viewport参数
2020/10/28 HTML / CSS
企业文化标语大全
2014/06/10 职场文书
2014领导班子“四风问题”对照检查材料思想汇报(执法局)
2014/09/21 职场文书
经验交流材料格式
2014/12/30 职场文书
党员“一帮一”活动总结
2015/05/07 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS