PHP正则表达式替换站点关键字链接后空白的问题解决

标题这样不知道合适不合适。具体的情况是这样的:网站要增加关键字链接功能,然后需要对文章的内容进行正则表达式匹配并替换,然后使用了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的默认配置应该没啥问题,我自己写的这程序还是不够好!

时间: 2024-11-08 05:36:02

PHP正则表达式替换站点关键字链接后空白的问题解决的相关文章

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

首先,建议大家安装完wordpress网站程序之后第一时间设置一下固定链接,避免以后修改出错.在wp后台仪表盘左侧导航里找到“设置——固定链接”即可配置你的wordpress固定链接,通常我习惯使用的有两种: /%postname%.html 和 /%post_id%.html 当然你如果不想修改,使用wp默认的链接方式也是可以的,只是感觉不太美观而已.下面主要说一下建站之后,wordpress修改固定链接出现404错误不能访问文章的解决步骤.出现这个错误应该是伪静态功能的问题,那么来看一下我怎

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

表达式 说明\t 制表符.\n 新行.. 匹配任意字符.| 匹配表达式左边和右边的字符. 例如, "ab|bc" 匹配 "ab" 或者 "bc".[] 匹配列表之中的任何单个字符. 例如, "[ab]" 匹配 "a" 或者 "b". "[0-9]" 匹配任意数字.[^] 匹配列表之外的任何单个字符. 例如, "[^ab]" 匹配 "a&q

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

写项目需要将公式配置到数据库中,取出后根据公式规则进行比较,由于公式的等于是用单等号,在java中无法直接使用,故需要将单等号替换成双等号,单又不能影响大于等于以及其他形式.故果断选择正则表达式替换.以此留痕,备用. @org.junit.Test public void test4() { String expression="a = 0"; String aa=""; aa=expression.replaceAll("([^=><])=(

[转]notepad++正则表达式替换字符串详解

原文:http://blog.csdn.net/qinboecjtu/article/details/6035028 正则表达式是一个查询的字符串,它包含一般的字符和一些特殊的字符,特殊字符可以扩展查找字符串的能力,正则表达式在查找和替换字符串的作用不可忽视,它 能很好提高工作效率. EditPlus的查找,替换,文件中查找支持以下的正则表达式: 表达式 说明 /t 制表符. /n 新行. . 匹配任意字符. | 匹配表达式左边和右边的字符. 例如, "ab|bc" 匹配 "

EditPlus正则表达式替换字符串详解

网上搜集了些实例 正则表达式是一个查询的字符串,它包含一般的字符和一些特殊的字符,特殊字符可以扩展查找字符串的能力,正则表达式在查找和替换字符串的作用不可忽视,它能很好提高工作效率. EditPlus的查找,替换,文件中查找支持以下的正则表达式: Expression Description\t Tab character.\n New line.. Matches any character.| Either expression on its left and right side matc

分享 WebBrowser显示Html内容3点细节技巧,解决刷新后空白

直接显示Html内容,不像直接导航网址容易处理: 问题:按微软的控件属性提示,可以用WebBrowser.DocumentText 属性赋值 ,但是这种赋值,只是首次有效,后续切换都没啥作用. 下面给出自己追求摸索的两点技巧: 1:通过WebBrowser.Document.Write(html)方法来输出html内容显示. 由于WebBrowser 需要经历几个事件后才会显示,直接输出是不行的,为此,需要有点技巧的使用: wbShowBlog.Navigate("about:blank&quo

vi中的正则表达式替换

今天接到了个任务,要将字符串Test("\r\nABC")替换为Test("ABC\n"),其中使用到了分组替换的方法,使用vi执行如下命令进行替换: %s/"\(\\r\\n\)\([^\\]*\)"/"\2\\n"/g %s - vi的替换命令 尾部的/g意味全局替换 "\(\\r\\n\)\([^\\]*\)" 部分 其中 \(\)的方式为匹配后为设定分组编号,系统会自动进行编号,后面通过\1 \2这

浅析正则表达式-替换原则

浅析正则表达式-替换原则 --> 一.开篇 最近经常用到替换的东西所以就出来整理下,这里要分享的是正则表达式里面的替换原则,首先要声明的是这里提及到的替换原则是.NET里面的正则表达式的替换原则.先看一下替换的定义替换是只能在替换模式中识别的语言元素. 它们使用正则表达式模式定义全部或部分用于替换输入字符串中的匹配文本的文本. 替换模式可以包含一个或多个替换以及本文字符.其实个人总结的替换的大致是这样的,替换的内容永远都是原文本的内容,通过正则表达式匹配出来文本,来通过组名或者组号来进行对原文本

正则表达式替换和不包含指定字符串

需求 展示一段文字,段落中有些特殊标记的人名.刊名等,格式大体是:“(作者<刊名>其他)”,某个字段可以为空,比如作者为空. 那么对应的正则大体是这样的   '\((.*?)<(.*?)>.*?\)' 最终的效果是 “(<a>作者</a><<a>刊名</a>>其他)” 第一版 1 class Program 2 { 3 static string str = @"<p>[例]当夫广州之首难,武汉兴师,