我有一个字符串,其中包含html上的电子邮件正文。所以我需要删除其中一条身体线条。我做了一个肮脏的技巧,但我想我能找到一种更有效的方法。
例如我有:
<p style="background:white">
<span style="font-size:10.0pt;font-family:"Trebuchet MS","sans-serif"">
Coût element : 43.19 €.
<u></u><u></u>
</span>
</p>
我想删除整行。 我做了一个只删除价格的功能,并在它输入下一行的第一个字母时停止(在这种情况下&#34; L&#34;)。功能:
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中的文本,如果它更容易我怎么做呢? 注意:我想删除费用,因为我不得不重新发送电子邮件。
希望有人帮助我! 提前谢谢。
答案 0 :(得分:1)
当我想在HTML电子邮件中使用占位符和条件部分时,我使用的一个脏小技巧是使用HTML注释。如果您可以控制发送的HTML,则可以将HTML电子邮件设置为:
<p style="background:white">
<span style="font-size:10.0pt;font-family:"Trebuchet MS","sans-serif"">
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作为不包含价格的电子邮件发送
答案 1 :(得分:0)
我终于用正则表达式做了这样的事情:
$body = preg_replace('#(Translation\s+cost)\s*:\s*\d+(\.\d+)?#u', '$1:', $body);
它有效!