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版(5)
Oct 09 PHP
使用Xdebug调试和优化PHP程序之[1]
Apr 17 PHP
php $_SERVER[&quot;REQUEST_URI&quot;]获取值的通用解决方法
Jun 21 PHP
在PHP中实现Javascript的escape()函数代码
Aug 08 PHP
浅谈php优化需要注意的地方
Nov 27 PHP
ThinkPHP中Session用法详解
Nov 29 PHP
php截取字符串函数分享
Feb 02 PHP
php实现通用的信用卡验证类
Mar 24 PHP
PHP设计模式之委托模式定义与用法简单示例
Aug 13 PHP
php微信公众号开发之校园图书馆
Oct 20 PHP
asp函数split()对应php函数explode()
Feb 27 PHP
PHP常用的类封装小结【4个工具类】
Jun 28 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
印尼林东PWN黄金曼特宁咖啡豆:怎么冲世界上最醇厚的咖啡冲煮教程
2021/03/03 冲泡冲煮
基于mysql的论坛(1)
2006/10/09 PHP
PHP开发框架Laravel数据库操作方法总结
2014/09/03 PHP
深入分析PHP引用(&amp;)
2014/09/04 PHP
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
thinkPHP3.2.2框架行为扩展及demo示例
2018/06/19 PHP
PHP实现基于3DES算法加密解密字符串示例
2018/08/24 PHP
PJ Blog修改-禁止复制的代码和方法
2006/10/25 Javascript
JavaScript CSS修改学习第五章 给“上传”添加样式
2010/02/19 Javascript
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
js修改table中Td的值(定义td的双击事件)
2013/01/10 Javascript
js确认删除对话框适用于a标签及submit
2014/07/10 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
2014/10/17 Javascript
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
使用jquery提交form表单并自定义action的实现代码
2016/05/25 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
javascript中replace使用方法总结
2017/03/01 Javascript
JavaScript队列的应用实例详解【经典数据结构】
2017/04/12 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
[00:30]塑造者的传承礼包-戴泽“暗影之焰”套装展示视频
2014/04/04 DOTA
Pycharm学习教程(1) 定制外观
2017/05/02 Python
15行Python代码实现网易云热门歌单实例教程
2019/03/10 Python
Django基础知识 URL路由系统详解
2019/07/18 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
运行Python编写的程序方法实例
2020/10/21 Python
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
J2EE是技术还是平台还是框架
2016/08/14 面试题
电子商务专业个人的自我评价分享
2013/10/29 职场文书
机械电子工程毕业生自荐信
2013/11/23 职场文书
化工工艺设计求职信
2014/06/25 职场文书
演讲稿开场白台词
2014/08/25 职场文书
六查六看自检自查剖析材料
2014/10/14 职场文书
城管个人总结
2015/02/28 职场文书
go xorm框架的使用
2021/05/22 Golang
PYTHON InceptionV3模型的复现详解
2022/05/06 Python