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将向Java靠拢
Oct 09 PHP
一个php作的文本留言本的例子(二)
Oct 09 PHP
用PHP制作静态网站的模板框架(一)
Oct 09 PHP
PHP中动态HTML的输出技术
Oct 09 PHP
支持中文字母数字、自定义字体php验证码代码
Feb 27 PHP
php中用socket模拟http中post或者get提交数据的示例代码
Aug 08 PHP
php结合ACCESS的跨库查询功能
Jun 12 PHP
PHP中的类型提示(type hinting)功能介绍
Jul 01 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
Sep 25 PHP
基于PHP实现假装商品限时抢购繁忙的效果
Oct 16 PHP
CI框架中redis缓存相关操作文件示例代码
May 17 PHP
redis+php实现微博(三)微博列表功能详解
Sep 23 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 无限级缓存的类的扩展
2009/03/16 PHP
PHP实现带重试功能的curl连接示例
2016/07/28 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
showModelessDialog()使用详解
2006/09/07 Javascript
js动态修改input输入框的type属性(实现方法解析)
2013/11/13 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
使用ES6语法重构React代码详解
2017/05/09 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
2017/07/17 Javascript
react-redux中connect的装饰器用法@connect详解
2018/01/13 Javascript
详解vue项目中实现图片裁剪功能
2019/06/07 Javascript
微信小程序如何连接Java后台
2019/08/08 Javascript
JS多个异步请求 按顺序执行next实现解析
2019/09/16 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
2019/06/28 Python
使用python来调用CAN通讯的DLL实现方法
2019/07/03 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
django 文件上传功能的相关实例代码(简单易懂)
2020/01/22 Python
使用Python pip怎么升级pip
2020/08/11 Python
html5 touch事件实现页面上下滑动效果【附代码】
2016/03/10 HTML / CSS
用HTML5实现手机摇一摇的功能的教程
2012/10/30 HTML / CSS
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
使用HTML5 Canvas API控制字体的显示与渲染的方法
2016/03/24 HTML / CSS
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
怎样自定义一个异常类
2016/09/27 面试题
大学新生欢迎词
2014/01/10 职场文书
乡镇党委书记个人整改措施
2014/09/15 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
毕业论文答辩开场白和结束语
2015/05/27 职场文书
关于Numpy之repeat、tile的用法总结
2021/06/02 Python
详解MongoDB的条件查询和排序
2021/06/23 MongoDB