标题这样不知道合适不合适。具体的情况是这样的:网站要增加关键字链接功能,然后需要对文章的内容进行正则表达式匹配并替换,然后使用了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正则表达式替换站点关键字链接后空白的问题解决的更多相关文章

  1. Notepad++快捷键&正则表达式替换字符串&插件

    Notepad++绝对是windows下进行程序编辑的神器之一,要更快速的使用以媲美VIM,必须灵活掌握它的快捷键,下面对notepad++默认的快捷键做个整理(其中有颜色的为常用招数): 1. 文件 ...

  2. 关于在Eclipse中使用正则表达式替换的一点记录(使用正则表达式的分组)

    今天在工作中遇到了点替换的麻烦事,由于数据类进行了变动,具体情况是这样的,需要将下面的代码: player.skillData[i].name 替换为: player.skillData.getSki ...

  3. NotePad++ 正则表达式替换

    NotePad++ 正则表达式替换 高级用法 [转] - aj117 - 博客园 https://www.cnblogs.com/tibit/p/6387199.html const getQAPar ...

  4. 解决wordpress修改固定链接后出现404错误不能访问文章的方法

    首先,建议大家安装完wordpress网站程序之后第一时间设置一下固定链接,避免以后修改出错.在wp后台仪表盘左侧导航里找到“设置——固定链接”即可配置你的wordpress固定链接,通常我习惯使用的 ...

  5. CentOS 6.5(64bit)安装GCC4.8.2+Qt5.2.1(替换GCC的链接库)

    截至目前,Qt的最新版本为5.2.1,CentOS的版本为6.5,GCC的版本为4.8.2,经过一番尝试,终于将Qt开发环境安装到了CentOS(64 bit)中,整个过程中有几个需要注意的地方,在这 ...

  6. notepad++正则表达式替换字符串详解

    正则表达式是一个查询的字符串,它包含一般的字符和一些特殊的字符,特殊字符可以扩展查找字符串的能力,正则表达式在查找和替换字符串的作用不可忽视,它 能很好提高工作效率. EditPlus的查找,替换,文 ...

  7. 使用Dreamweaver正则表达式替换href中的内容

    在Dreamweaver中使用正则表达式替换href中的内容,就像下面这些href中的内容复杂多样的情况下,href="/html/u.html",href="/tuho ...

  8. js获取带#号链接后的参数

    现在许多的主流网站都将'#'大规模用于重要URL中,我们通过正则表达式和window.location.search获取参数已经行不通了. 一.'#'号是什么 1.#代表网页中的一个位置.其后面的字符 ...

  9. java replaceall 使用正则表达式替换单等号,不替换其他相关的等号。

    写项目需要将公式配置到数据库中,取出后根据公式规则进行比较,由于公式的等于是用单等号,在java中无法直接使用,故需要将单等号替换成双等号,单又不能影响大于等于以及其他形式.故果断选择正则表达式替换. ...

随机推荐

  1. 【Python】Python3中的str和bytes

    参考文章:Python 3的bytes/str之别 len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数 >>> len('ABC') 3 >& ...

  2. mac上eclipse用gdb调试(转)

    mac上eclipse用gdb调试 With its new OS release, Apple has discontinued the use of GDB in OS X. Since 2005 ...

  3. 什么是hasLayout?

    想更好的理解CSS,尤其是IE下对CSS的渲染,hasLayout是一个非常有必要彻底弄清楚的概念,大多数IE下的显示错误,就是源于hasLayout.hasLayout是一种只读属性,有两种状态tr ...

  4. php封装微信SDK

    <?phpclass JSSDK { private $appId = '你公众号的appid'; private $appSecret = '你公众号的appSecret'; public f ...

  5. 5.对与表与表之间的关系,efcore是如何处理的

    public class Account { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Accoun ...

  6. python两种生成md5的方法

    一. 使用md5包 import md5 src = 'this is a md5 test.' m1 = md5.new() m1.update(src) print m1.hexdigest() ...

  7. docker tomcat7 dubbo-admin monitor

    docker run --name=dubbo_admin9201 -tid -p : -v /home/dubbo/admin:/usr/local/tomcat7/webapps/ROOT cen ...

  8. em和rem

    em是一个相对值,是相对于父元素的值. body{ font-size:62.5%;/*10/16*100%=62.5%*/ } h1{ font-size:2.4em;/*2.4em*10=24px ...

  9. jQuery.is() 函数

    is() 函数 判断当前对象是否符合指定表达式 语法 $selector.is(表达式)//指定表达式 返回值 返回值为布尔型(true/false) 当当前对象包含多个元素时,只要任意元素满足指定表 ...

  10. python虚拟环境

    sudo apt-get install python-virtualenv virtualenv --no-site-packages files cd files source ./bin/act ...