2016-07-16 82 views
3

我有一个html代码。现在我想查找所有的href标签,并希望将其url转换为另一个url。我使用这个代码查找并将所有href网址转换为另一个网址php

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

它为我perfactly ..