PHP如何从多行中删除= 20

时间:2015-03-11 23:21:46

标签: php regex replace

我想知道是否可以从文本块中的多行末尾删除= 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;

2 个答案:

答案 0 :(得分:2)

这是quoted-printable编码,它使用=后跟十六进制代码来编码纯文本中的特殊字符。使用quoted_printable_decode解码以这种方式编码的邮件。您不必担心文本中任何位置的文字=20,因为它应编码为=3D20=3D=符号的编码),以及在解码时你会收回原来的=20

答案 1 :(得分:1)

你可以使用丢弃技术和正则表达式这样做:

http://.*=20$(*SKIP)(*FAIL)|=20

<强> Working demo

这个正则表达式背后的想法是丢弃与(*SKIP)(*FAIL)匹配的内容并保留=20。所以,对于你的情况,正则表达式将丢弃链接。

您可以在Substitution部分中看到预期的输出。

enter image description here

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);