我想知道是否可以从文本块中的多行末尾删除= 20?这是我的电子邮件到票证网关。当收到回复并包含多个“= 20”时,我想删除它们。但是,如果它合法地成为电子邮件(例如URL),我想保持完整= 20。传入电子邮件的示例:
$correspondence = <<<EOF
Hello=20
=20
Thank you for getting back to me.=20
The link you need is http://domain.com/index.php?id=204726 .=20
Regards=20
EOF;
答案 0 :(得分:2)
这是quoted-printable编码,它使用=
后跟十六进制代码来编码纯文本中的特殊字符。使用quoted_printable_decode
解码以这种方式编码的邮件。您不必担心文本中任何位置的文字=20
,因为它应编码为=3D20
(=3D
是=
符号的编码),以及在解码时你会收回原来的=20
。
答案 1 :(得分:1)
你可以使用丢弃技术和正则表达式这样做:
http://.*=20$(*SKIP)(*FAIL)|=20
<强> Working demo 强>
这个正则表达式背后的想法是丢弃与(*SKIP)(*FAIL)
匹配的内容并保留=20
。所以,对于你的情况,正则表达式将丢弃链接。
您可以在Substitution
部分中看到预期的输出。
php代码:
$re = "/http.*=20$(*SKIP)(*FAIL)|=20/m";
$str = "\$correspondence = <<<EOF\nHello=20\n=20\nThank you for getting back to me.=20\nThe link you need is http://domain.com/index.php?id=204726 .=20\nRegards=20\nEOF;";
$subst = "";
$result = preg_replace($re, $subst, $str);