用正则替换所有URL
作者:xlingfairy 来源:xlingfairy博客 发布时间:2009-03-13 13:51:00
客户需要一个类似 news letter 的功能,当然,内容是可编辑的,而且还要以 HTML 格式呈现给用户。
这就需要在发送邮件的时候,指明邮件编码格式,用 PHPMailer,可以直接写:
$email->IsHTML(true);
就行了。如果是用 mail()函数,可以加个 addition_header:
$addition_header = 'MIME-Version: 1.0' . "\r\n";
$addition_header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
mail($to,$subject,$message,$addition_header);
当然,还可以加其它参数,如:
$headers .= 'From: xling<xling#xling.com>'."\r\n";
$headers .= 'Bcc: xling#xling.cn';
我用的是 FCKEditor 做为 编辑器的,把内容保存为文件,但是这样一来,有个问题,就是 magic_quotes 的问题
解决办法就是 set_magic_quotes_runtime(1);
后面的问题就是把所有的 URL 取出来,规则化。
以下这代码,单独运行,是会把每个 src 的前面加上http://域名 的,
$str = "
<div><img height=\"512\" width=\"512\" src=\"/uploads/image/aa/001.png\" alt=\"\" /></div>
<div><img height=\"512\" width=\"512\" src=\"/uploads/image/aa/001.png\" alt=\"\" /></div>
<div><img height=\"512\" width=\"512\" alt=\"\" src=\"/uploads/image/aa/001.png\" /></div>
<a href='../aa.php'>aaa</a>
<a href='../../../aa.php'>aaa</a>
";
function fillDomain($ma){
//var_dump($ma);
$url = $ma[5];
if(!preg_match('/^[(http(s)?:)|(javascript:)]/i',$url))
return $ma[1].'='.$ma[4].'http://my.dajiaozi.com/'.$url;//.$ma[4];
else
return $ma[0];
}
echo preg_replace_callback('/((src)|(href))\s*=\s*(\'|")(?<url>[^\'">]*)\2*/','fillDomain',$str);
但是:
$cnt = GRequest::getString('cnt'); // 从 FCKEditor 处来取来,
$cnt = preg_replace_callback('/((src)|(href))\s*=\s*(\'|")(?<url>[^\'">]*)\2*/','fillDomain',$cnt);
却无论如何也取不出来任何 URL,一开始,我还以为是 set_magic_quotes_runtime 造成的,但是无论 set_magic_quotes_runtime( 1 ) 还是 set_magic_quotes_runtime( 0 ) 结果都是一样,URL一个都取不出来!
后来,干脆把
$cnt = preg_replace_callback('/((src)|(href))\s*=\s*(\'|")(?<url>[^\'">]*)\2*/','fillDomain',$cnt);
改成:
$cnt = preg_replace_callback('/((src)|(href))\s*=[^\'"]*(\'|")(?<url>[^\'">]*)\2*/','fillDomain',$cnt);
问题才解决!
猜你喜欢
- 本文介绍了网页运行代码框(runCode), 复制代码框(copyCode), 保存代码框(saveCode),的实现方法。javascri
- <% Rem Rem ## 在线升级类声明 Class Cls_oUpdate
- 一个网站信息结构需要表现给用户看,这样用户才能知道当前是在哪儿,才有可能去猜测某个内容可能会在哪儿。如何表现网站的信息结构给用户呢?用导航。
- <% dim conn,mdbfile mdbfile=server.mappath("数据库名称.mdb") s
- HTML5 是近十年来 Web 标准最巨大的飞跃。和以前的版本不同,HTML 5 并非仅仅用来表示 Web 内容,它的使命是将 W
- 经常在网上冲浪的朋友是否曾注意到有些网站的鼠标不是规则的斜向上箭头的形状,而是"十"
- 实现了宽度、高度、透明度的渐变,还能以高度宽度中点为中心,还扩展成以任意点为中心渐变(实例中以点击点为中心)。<!DOCTYPE ht
- Truncate是SQL中的一个删除数据表内容的语句,用法是:TRUNCATE TABLE [Table Name]。下面是对Truncat
- 大家在打开带有图片的网页时,有时会看到这样的情况:当鼠标指向图片的不同部位时,可以打开不同的超链接,这
- 1、简单的按钮js事件 用于判断和显示提示 <script type="text/javascript&
- 1. RS.OPEN SQL,CONN,A,B,C2. CONN.EXECUTE(SQL,RowsAffected,C)参数含义:SQL的值
- 您是否常常在做网页的过程中发现一个问题呢?当图片上传的时候,如果图片太大 ,就会把网页撑破,唯一做的就要先把它用软件缩小,再上传上
- css的流行导致了标签的流行,很直观,看起来很清爽。流行的一部分,还有很多种功能强大且美观的导航。。。1. Change.org2. N.D
- 本文介绍了数据库索引,及其优、缺点。针对MySQL索引的特点、应用进行了详细的描述。分析了如何避免MySQL无法使用,如何使用EXPLAIN
- 常见的双倍边距类问题都遇到过,但很少遇到这种有意思的,所以记录一下。这个BUG是发生在Standards模式下(就是包含XHTML或者HTM
- 很多朋友想用SQL2000数据库的编程方法,但是却又苦于自己是学ACCESS的,对SQL只是一点点的了解而已,这里我给大家提供以下参考---
- 如何做一个可以让人家申请使用的计数器? 好了,我们来做一个与页面分离的计数器,是文本型的啦。这也很简单,
- 在大型的ASP项目中,很多的页面都涉及到分页、翻页功能。如果每个页面都写一个翻页的程序的话,这样的工作即降低了工作效率,也不利于工程的模块化
- 本文介绍了用ASP的AdoDb.Stream读取/写入UTF-8编码格式的文件的方法:函数名称:ReadTextFile 作用:利用AdoD
- asp创建pdf文件代码,详见以下代码:<%Option ExplicitSub CheckXlDriver()&