我有一个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标记还有任何其他标记(如类或目标)或任何其他标记无法转换链接时。 请给我合适的解决方案 提前谢谢你
答案 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);
}
它对我有用..