找到并将所有href url转换为另一个url php

时间:2016-07-16 05:16:50

标签: php

我有一个HTML代码。现在我想找到所有href标签,并希望将其url转换为另一个url。我正在使用此代码

public function convertLinks($message,$stats_code)
{
  $click_link = site_url('click-'.$stats_code.'email');
  $content = explode("\n", $message);
  $URLs = array();
  for($i=0;count($content)>$i;$i++)
   {
     if(preg_match('/<a href=/', $content[$i]))
      {
        list($Gone,$Keep) = explode("href=\"", trim($content[$i]));
        list($Keep,$Gone) = explode("\">", $Keep);
        $message= strtr($message, array( "$Keep" => $click_link.$Keep, ));
      }
   }
  return $message;
}

此代码工作正常,但当一个行中有2个或更多href链接时,它只会转换第一个href链接,并且当ancher标记还有任何其他标记(如类或目标)或任何其他标记无法转换链接时。 请给我合适的解决方案 提前谢谢你

1 个答案:

答案 0 :(得分:1)

public function convertLinks($message,$stats_code)
{
  $click_link = site_url('click-'.$stats_code.'email');
  $message = str_replace('<a','{smart_href_link_epro} <a',$message);
  $content = explode("{smart_href_link_epro}", $message);
  $a_count = count($content);

  for($i=0;$a_count>$i;$i++)
   { 
     if(preg_match('/href=/', $content[$i]))
      {
        list($Lost,$Keep) = explode("href=\"", trim($content[$i]));
        list($Keep,$Lost) = explode("\"", $Keep);
        if($Keep!='#' && $Keep!='')
        $message= strtr($message, array( "$Keep" => $click_link.base64_encode(base64_encode($Keep)), ));
      }  
   } 

  return str_replace('{smart_href_link_epro}','',$message);
}

它对我有用..