我有一个时事通讯邮件,可以自动发送电子邮件,但是我发现其中有一个错误。 我查看了时事通讯,发现颜色被弄乱了,在调试之后,我发现是由链接替换函数引起的,以某种方式正确替换了str_replace,但是它也用a更改了颜色的hashtag链接,并且位于不存在href链接的地方:
style="font-size: 8pt; color: https://etcetc.com"
这是一种奇怪的情况,因为它正确替换了所有链接,但是似乎str_replace替换了所有颜色:;以及链接的值,这是不应该的。
我尝试将旧链接和新链接放入数组中,以查看其中是否有任何较浓的颜色,但是在数组中,链接正确显示,并用旧的和新的替换。
我尝试过而不是替换foreach,而是将旧链接和新链接传递到新数组,并从那里进行解析,但结果相同。
// Trocar links para contabilitizar | Change links to parser
$html = $corpo; // This contains the HTML of the newsletter
//Create a new DOM document
$dom = new DOMDocument;
//Parse the HTML. The @ is used to suppress any parsing errors
//that will be thrown if the $html string isn't valid XHTML.
@$dom->loadHTML($html);
//Get all links. You could also use any other tag name here,
//like 'img' or 'table', to extract other tags.
$links = $dom->getElementsByTagName('a');
//Iterate over the extracted links and display their URLs
foreach($links as $link) {
$old_link = $link->getAttribute('href');
$new_link = $this->url."/scripts/link.php?link=".$link->getAttribute('href')."&campaign_id=".$cid;
$html = str_replace($old_link, $new_link, $html);
}
$corpo = $html;
print_r($corpo);
新闻稿HTML的示例,原始版本:https://codepen.io/gx19/pen/XwdaMN 我出于安全原因删除了图片链接
以下是此函数对html所做的操作: https://codepen.io/gx19/pen/byproX
修复:(非常感谢@LucaRainone) 我必须检查旧的URL是否实际上是URL,否则它将替换颜色的标签。//Iterate over the extracted links and display their URLs
foreach ($links as $link){
$old_link = $link->getAttribute('href');
$new_link = $this->url."/scripts/link.php?link=".$link->getAttribute('href')."&campaign_id=".$cid;
if (strpos($old_link, 'https://') !== false OR strpos($old_link, 'http://') !== false) {
$html = str_replace($old_link,$new_link,$html);
}
}