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 set_time_limit(0)长连接的实现分析
Mar 02 PHP
PHP设计模式之调解者模式的深入解析
Jun 13 PHP
php使用PDO方法详解
Dec 27 PHP
PHP中应该避免使用同名变量(拆分临时变量)
Apr 03 PHP
给WordPress中的留言加上楼层号的PHP代码实例
Dec 14 PHP
优化WordPress中文章与评论的时间显示
Jan 12 PHP
php集成动态口令认证
Jul 21 PHP
thinkPHP的表达式查询用法详解
Sep 14 PHP
php中各种定义变量的方法小结
Oct 18 PHP
PHP实现关键字搜索后描红功能示例
Jul 03 PHP
Laravel 自定命令以及生成文件的例子
Oct 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
我的论坛源代码(八)
2006/10/09 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
超级酷和最实用的jQuery实例收集(20个)
2010/04/21 Javascript
js获取checkbox复选框选中的选项实例
2014/08/24 Javascript
JS实现的另类手风琴效果网页内容切换代码
2015/09/08 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
详解在vue-cli项目中安装node-sass
2017/06/21 Javascript
详解使用vue实现tab 切换操作
2017/07/03 Javascript
JavaScript实现AOP详解(面向切面编程,装饰者模式)
2017/12/19 Javascript
用Axios Element实现全局的请求loading的方法
2018/03/15 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
vue-devtools的安装和使用步骤详解
2019/10/17 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
[02:57]DOTA2英雄基础教程 风行者
2014/01/16 DOTA
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
python获取远程图片大小和尺寸的方法
2015/03/26 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
python之PyMongo使用总结
2017/05/26 Python
Python实现多线程抓取网页功能实例详解
2017/06/08 Python
深入理解Django中内置的用户认证
2017/10/06 Python
Python基于dom操作xml数据的方法示例
2018/05/12 Python
Python3.6简单反射操作示例
2018/06/14 Python
Python实现将Excel转换成xml的方法示例
2018/08/25 Python
PyTorch和Keras计算模型参数的例子
2020/01/02 Python
美国网上书店:Barnes & Noble
2018/08/15 全球购物
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
金智子午JAVA面试题
2015/09/04 面试题
介绍一下RMI的基本概念
2016/12/17 面试题
计算机专业自荐信
2013/10/14 职场文书
欢迎家长标语
2014/10/08 职场文书
信用卡收入证明范本
2015/06/12 职场文书
2015团员个人年度总结
2015/11/24 职场文书
2019自荐信该如何写呢?
2019/07/05 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
教你用Java Swing实现自助取款机系统
2021/06/11 Java/Android