HTML字符串删除整行

时间:2013-06-30 20:34:34

标签: php function line erase plaintext

我有一个字符串,其中包含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>

我想删除整行。 我做了一个只删除价格的功能,并在它输入下一行的第一个字母时停止(在这种情况下&#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中的文本,如果它更容易我怎么做呢? 注意:我想删除费用,因为我不得不重新发送电子邮件。

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

2 个答案:

答案 0 :(得分: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作为不包含价格的电子邮件发送

答案 1 :(得分:0)

我终于用正则表达式做了这样的事情:

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

它有效!