1

我有一个字符串,其中包含 html 上的电子邮件正文。所以我需要去除其中一条身体线条。我做了一个肮脏的把戏,但我想我可以找到一种更有效的方法。

例如我有:

<p style="background:white">
<span style="font-size:10.0pt;font-family:&quot;Trebuchet MS&quot;,&quot;sans-serif&quot;">
   Coût element : 43.19 €. 
   <u></u><u></u>
</span>
</p>

我想删除整行。我做了一个只删除价格的函数,当它找到下一行的第一个字母时停止(在这种情况下是“L”)。功能:

function clear_french($body){
   $value = utf8_encode(quoted_printable_decode('element'));
   $ini = strpos($body,$value);
   $i = 0;
   if($ini === false){}
   else{
        while ( $body[$ini+strlen($value)+$i] != 'L' ) {
            //echo $body[$ini+strlen($value)+$i];
            $body[$ini+strlen($value)+$i]="";
            $i++;
        }
        if ($body[$ini+strlen($value)+$i] == 'L'){
            $body[$ini+strlen($value)+$i-1]=" ";
        }

}
return $body;
}

但我不知道是否有任何有效的方法可以更干净、更快速地做到这一点。而且我不知道在 $body 中使用纯文本是否应该更容易,如果更容易我该怎么做?注意:我想删除成本,因为我必须重新发送没有它的电子邮件。

希望有人帮助我!提前致谢。

4

2 回答 2

1

当我想在我的 HTML 电子邮件中使用占位符和条件部分时,我使用的一个肮脏的小技巧是使用 HTML 注释。如果您可以控制发送的 HTML,您可以像这样设置您的 HTML 电子邮件:

<p style="background:white">
<span style="font-size:10.0pt;font-family:&quot;Trebuchet MS&quot;,&quot;sans-serif&quot;">
   Coût element : <!-- __CONDITION_NAME_START__ -->43.19 €.<!-- __CONDITION_NAME_END__ -->
   <u></u><u></u>
</span>
</p>

然后发送一次包含价格的电子邮件。(价格会出现,因为它没有评论)

然后您可以使用preg_replace剥离该部分:

$newBody = preg_replace('<!-- __CONDITION_NAME_START__ -->(.|\n)*?<!-- __CONDITION_NAME_END__ -->', '', $body);

并发送 $newBody 作为您的电子邮件,不包含价格

于 2013-06-30T21:37:38.270 回答
0

我终于用正则表达式做到了,类似 taht:

$body = preg_replace('#(Translation\s+cost)\s*:\s*\d+(\.\d+)?#u', '$1:', $body);

它有效!

于 2013-07-01T12:49:10.340 回答