STR_REPLACE正在替换不应该使用的内容

时间:2019-05-10 11:39:29

标签: php html

我有一个时事通讯邮件,可以自动发送电子邮件,但是我发现其中有一个错误。 我查看了时事通讯,发现颜色被弄乱了,在调试之后,我发现是由链接替换函数引起的,以某种方式正确替换了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);
                }

            }

0 个答案:

没有答案