用正则替换所有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
投稿

猜你喜欢

  • 基于python的Tkinter实现一个简易计算器

    2021-07-15 19:15:12
  • 使用Python实现 学生学籍管理系统

    2023-08-21 18:42:47
  • Python 错误和异常小结

    2021-08-19 12:17:58
  • pytorch中的squeeze函数、cat函数使用

    2022-03-27 14:32:24
  • Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法

    2021-09-04 06:14:32
  • 获取当前url

    2024-05-09 09:04:30
  • vue实现表单录入小案例

    2024-05-09 15:11:07
  • Python解决两个整数相除只得到整数部分的实例

    2021-12-29 23:29:21
  • 用python3读取python2的pickle数据方式

    2023-06-05 09:45:48
  • pandas 使用apply同时处理两列数据的方法

    2021-09-27 07:35:30
  • 使用python matplotlib contour画等高线图的详细过程讲解

    2023-10-21 06:29:10
  • Python中urllib+urllib2+cookielib模块编写爬虫实战

    2023-10-21 19:02:35
  • ASP中3种分页显示的性能比较

    2007-08-15 13:37:00
  • python实现在列表中查找某个元素的下标示例

    2023-08-20 07:16:38
  • python实现DEM数据的阴影生成的方法

    2023-11-09 11:17:25
  • Python 实现子类获取父类的类成员方法

    2022-01-14 00:28:17
  • Python3实现获取图片文字里中文的方法分析

    2023-09-19 09:31:34
  • ORM Django 终端打印 SQL 语句实现解析

    2023-08-30 04:56:39
  • php下防止单引号,双引号在接受页面转义的设置方法

    2023-11-15 02:37:01
  • 在ASP.NET 2.0中操作数据之五十三:在Data Web控件显示二进制数据

    2023-07-21 05:18:32
  • asp之家 网络编程 m.aspxhome.com