我有一个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>
等。
答案 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>