【发布时间】:2012-04-09 06:07:27
【问题描述】:
我有一个 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= 未被识别,因此 Discount 以下列方式加入 Price after discount DiscountPrice after discount\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>
等
【问题讨论】:
-
搜索
decode quoted-printable,这就是你想要做的。它不仅仅是删除等号和换行符。 -
如果你 str_replace('=', '', $msg_body);之前 str_replace('=\n', '', $msg_body);通常没有更多 =\n 可检测...
-
我一个一个地使用了它们,而不是一次全部使用了 3 个,但是你说得对,必须小心放入不必要的代码行。
-
删除换行符和等号只是一个临时解决方案,因为我不知道我需要删除什么,而
decode quoted-printable是我需要的东西。
标签: php html email mime quoted-printable