【问题标题】:PHP How to remove =20 from multiple linesPHP如何从多行中删除=20
【发布时间】:2015-03-11 23:21:45
【问题描述】:

我想知道是否可以从文本块中的多行末尾仅删除 =20?这是我发给票务网关的电子邮件。当收到回复并包含多个“=20”时,我想删除它们。但是,如果 =20 合法地是电子邮件的一部分(例如 URL),我想保留它。传入电子邮件的示例:

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

【问题讨论】:

  • 你怎么知道它是否是 url 的一部分?我不会认为它是您示例中的网址的一部分。 .=20 在一个 url 对我来说似乎不是 url 的一部分之后。

标签: php regex replace


【解决方案1】:

这是quoted-printable 编码,它使用= 后跟十六进制代码来编码纯文本中的特殊字符。使用quoted_printable_decode 解码以这种方式编码的消息。你不必担心文本中任何地方的文字=20,因为它应该被编码为=3D20=3D= 符号的编码),你会得到原来的@解码时为 987654329@。

【讨论】:

    【解决方案2】:

    您可以使用带有正则表达式的丢弃技术来做到这一点:

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

    【讨论】:

      猜你喜欢
      • 2021-10-16
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      相关资源
      最近更新 更多