我想替换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 开头的不替换,又怎么写呢。谢谢。

解决方案 »

  1.   


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

  2.   


    <?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);
    ?>
      

  3.   

    $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>