用正则替换所有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);

问题才解决!

标签:正则表达式,url,正则
0
投稿

猜你喜欢

  • 两行 JavaScript 代码

    2010-08-31 14:57:00
  • SQL Server 2005中数据库镜像的四个问题

    2009-02-19 16:48:00
  • MYSQL教程:索引和查询优化程序

    2009-02-27 15:52:00
  • 怎样才能解决MySQL 5.0.16的乱码问题

    2008-12-03 15:58:00
  • DW MX 的快键一览表

    2009-07-21 12:47:00
  • 利用SQL语言有没有办法查到表中哪些记录中的全部

    2009-04-10 18:29:00
  • asp获取远程网页的指定内容的实现代码

    2011-02-16 10:41:00
  • 嵌入Flash应该考虑不支持Flash的浏览器

    2007-12-20 12:29:00
  • 纯数字不重复排列的另类方法

    2009-12-04 18:25:00
  • 整理各种js按比例缩放图片方法

    2007-09-27 20:01:00
  • Oracle 下的开发日积月累

    2009-02-28 11:08:00
  • Quester解读17条广告效果测定

    2007-11-27 12:51:00
  • DSN和DSN-Less两种数据库连接方式哪一种更好?

    2009-10-28 18:26:00
  • 如何利用SQL Server来发送电子发邮件?

    2010-01-01 15:37:00
  • 重新阅读《HTTP协议基础》

    2008-04-04 17:40:00
  • MySQL常见错误提示及解决方法

    2008-02-23 10:08:00
  • 如何尽快释放掉Connection对象建立的连接?

    2009-12-16 18:38:00
  • 五个小窍门帮你写出更好的CSS代码

    2009-06-09 12:42:00
  • 分析与比较五种MySQL数据库可靠性方案

    2009-07-30 08:25:00
  • Javascript"篱式"条件判断(翻译)

    2008-08-01 12:21:00
  • asp之家 网络编程 m.aspxhome.com