请教PHP替换超链接的方法

fffask 2009-12-14 10:32:14
我想替换HTML源代码中的超链接,在超链接前加上 /?url= 。

如:


$str = '网易10余年来一直致力于为广大用户提供方便又贴心的<a href="http://www.163.com/mail.html">电子邮件</a>服务,<a href="http://mail.163.com/" target="_blank">网易邮箱</a>因您的需求而卓越!';




我想将其中的链接替换为:

网易10余年来一直致力于为广大用户提供方便又贴心的<a href="/?url=http://www.163.com/mail.html">电子邮件</a>服务,<a href="/?url=http://mail.163.com/" target="_blank">网易邮箱</a>因您的需求而卓越!



请教应该怎么写 preg_replace 中的正则表达式?

如果要让 http://www.mydomain.com 开头的不替换,又怎么写呢。

谢谢。
...全文
645 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sciolist 2009-12-14
  • 打赏
  • 举报
回复
用正则吧,ls 给了
xuzuning 2009-12-14
  • 打赏
  • 举报
回复
$str = '网易10余年来一直致力于为广大用户提供方便又贴心的<a href="http://www.163.com/mail.html">电子邮件</a>服务,
<a href="http://mail.163.com/" target="_blank">网易邮箱</a>因您的需求而卓越!
信息来源:<a href="http://www.mydomain.com">自己的网站</a>,<a href="abc.html">某链接</a>';

echo preg_replace('#(http://)(?!www.mydomain.com)#', '/?url=$1', $str);


out:
网易10余年来一直致力于为广大用户提供方便又贴心的<a href="/?url=http://www.163.com/mail.html">电子邮件</a>服务,
<a href="/?url=http://mail.163.com/" target="_blank">网易邮箱</a>因您的需求而卓越!
信息来源:<a href="http://www.mydomain.com">自己的网站</a>,<a href="abc.html">某链接</a>
江南昆虫 2009-12-14
  • 打赏
  • 举报
回复

<?php
function chgurl($matches)
{
return preg_match('/www\.mydomain\.com/i',$matches[0]) ? $matches[0] : '/?url='.urlencode($matches[0]);
}

$str = '网易10余年来一直致力于为广大用户提供方便又贴心的<a href="http://www.163.com/mail.html">电子邮件</a>服务,
<a href="http://mail.163.com/" target="_blank">网易邮箱</a>因您的需求而卓越!
信息来源:<a href="http://www.mydomain.com">自己的网站</a>,<a href="abc.html">某链接</a>';

$str = preg_replace_callback('/(?<=href=")http:[^"]*(?=")/i','chgurl',$str);
var_dump($str);
?>
Fufuokcom 2009-12-14
  • 打赏
  • 举报
回复

$str = preg_replace('/<a(.*?)href="(.*?)"(.*?)>(.*?)<\/a>/i','<a$1href="/?url=$2"$3>$4</a>',$str);
echo $str;

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧