从html中删除`= \ n`

时间:2012-03-25 12:51:47

标签: php html email mime quoted-printable

我有一个RoundCube插件,它将消息体写入数据库,之后我需要将数据解析到另一个表中。通过使用RoundCube中的某些功能,我可以删除所有html标记,</td>替换为'\ n',</tr>替换为'\ n \ n'。这使得我的数据解析非常容易和健壮。只有一个缺点,html数据被分解为最后带有=的修复行,例如:

<td valign=3D"bottom" style=3D"color:#444444;padding:5px 10px 5=
px 0px;font-size:12px;border-bottom:1px solid #eeeeee;"><b>Discount</b></td=
><td valign=3D"bottom" align=3D"right" style=3D"color:#444444;padding:5px 0=
px 5px 0px;font-size:12px;border-bottom:1px solid #eeeeee;text-align:right;=
"><b>Price after discount</b></td>

现在,</td=未被识别,因此折扣以下列方式加入折扣后的价格 DiscountPrice之后折扣 \ n,而不是折扣 \ n 折扣后的价格 \ n。这是代码的全部内容,并且确实给我带来了严重的问题。

我试图删除=并打破以下内容:

$msg_body = str_replace('=', '', $msg_body);
$msg_body = str_replace('=\n', '', $msg_body);
$msg_body = str_replace('= ', '', $msg_body);

没有真正的成功。我不知道在=符号之后会出现哪种类型的中断,无论是换行符还是段落中断并尝试查找,但是徒劳无功,甚至查看了RoundCube代码。回应html并没有向我透露任何内容。

我在这里发布这个作为一般的php和html问题,希望有人可以帮我简单地删除这些=符号和神秘(对我来说)休息以便

</td=
>

变为

</td>

等。

3 个答案:

答案 0 :(得分:4)

=XY表示法是(oldschool但仍然使用!)引用可打印编码的一部分,表示7位ASC代码集中的8位ASCII字符串。所有> 127的字符都以=F3的形式编码,=是字符的十六进制表示。

例如,在您的HTML标记中,如果您仔细查看,=3D会被编码为$msg_body = quoted_printable_decode($msg_body);

Wikipedia on quoted-printable

了解详情

要将邮件解码回普通HTML,您必须将quoted_printable_decode()应用于字符串。

{{1}}

答案 1 :(得分:0)

为了正确包含转义字符,您必须在PHP中使用双引号("):

$msg_body = str_replace("=\n", '', $msg_body);

否则,PHP将查找字符串=\n

答案 2 :(得分:-1)

取决于你正在使用新系统的系统,可以是:

\n
\r
\r\n

所以也要检查那些

如果您知道只有选定数量的标记存在问题,您也可以使用regexp:

$msg_body = preg_replace('/(\w+)=[\s\r\n]*/', '$1', $msg_body);

在您的情况下,它应该将</td= ...>转换为<td>