用正则替换所有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);
问题才解决!


猜你喜欢
- 1、python 操作xml的方式介绍查看全部包含“三种⽅法:⼀是xml.dom. * 模块,它是W3CDOMAPI的实
- 1.经典类与新式类在了解Python的类与类型前,需要对Python的经典类(classic classes)与新式类(new-style
- 如果MySQL服务器启用了二进制日志,你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如,从你最后一次备份)直到现在或另一
- raw文件可能有些人没有,因此,先用一张图片创建一个raw格式的文件(其实可以是其他类型的格式文件)import numpy as npim
- 本文实例为大家分享了python实现杨氏矩阵查找的具体代码,供大家参考,具体内容如下问题描述:在一个m行n列二维数组中,每一行都按照从左到右
- 在cssrain整理的一个 试题集 中有这么一道题:<SCRIPT LANGUAGE="JavaScript"&g
- 由于该项目是针对中小学生竞赛并且是第一次举行,所以识别的目标交通标志仅仅只有直行、右转、左转和停车让行。数据集:链接: https://pa
- plt.imshow(image)无法显示图片的解决使用plt.imshow()发现不能显示图片,加了plt.show()也还是不能显示先引
- 一、软件包a) freetds-stable.gzb) php-5.2.12.tar.gz二、安装步骤a) tar zxvf freetds
- 前言:[学习SQL SERVER 2005系列]准备把学习2005的一些心得整理出来,和大家分享,共同学习一起提高。sql2005 精简版下
- 自定义分页样式,不多废话,直接上代码~ html部分<div id="my_id"> &nbs
- 目前lnmp一键安装包比较多的问题就是502 Bad Gateway,大部分情况下原因是在安装php前,脚本中某些lib包可能没有安装上,造
- 由于最近在处理shp文件,想要跳出arcpy的限制,所以打算学习一下pyshp包的使用方法。在使用《Python地理空间分析指南(第2版)》
- 题目描述原题链接 :268. 丢失的数字给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0
- 一、如何创建用户和密码1.进入到mysql数据库下mysql> use mysqlDatabase changed2.对新用户增删改1
- 前端开发部门在壮大,人员在增加,技术在进步。CSSer虽然不能代表前端开发团队,但CSSer是前端开发中非常重要的组成部分。一、文档写程序的
- 问题:我们每天都要编写一些Python程序,或者用来处理一些文本,或者是做一些系统管理工作。程序写好后,只需要敲下python命令,便可将程
- 目的:了解常用的ORM框架;使用SQLObject框架操作MySQL数据库。面试题:在Python语言中有哪些常用的ORM框架,它们有什么区
- 利用MySQLfs这个工具,我么可以在MySQL关系数据库中存储文件系统。MySQLfs将文件系统中文件的字节内容分解成数据库中的元组,而数
- Python中内置了一些与时间处理相关的库,如time、datatime和calendar库。其中time库是Python中处理时间的标准库