2

stdin 的内容被自动换行和尾随“=”破坏,这显然破坏了我需要发布的 URL。

我需要从电子邮件中提取 URL/链接,然后发布 URL。所以,我正在使用我在互联网上看到的标准代码片段将我的电子邮件发送到 cpanel 中的 php 脚本:

$fd = fopen("php://stdin", "r");
$email = ""; // This will be the variable holding the data.
while (!feof($fd)) { $email .= trim(fread($fd, 1024)); }
fclose($fd);

然后暂时将电子邮件的内容转储到文件“pipemail.txt”中以检查它并确保它一切正常。

$fdw = fopen("pipemail.txt", "w+");
fwrite($fdw, $email);
fclose($fdw);

输出如下所示:

...
<table style=3D"width:100%" cellpadding=3D"0" cellspacing=3D"0" border=3D"0=
"><tbody><tr><td><table style=3D"background-color:#ffffff;color:#3c445a;fon=
t-family:arial;font-size:10px;font-weight:bold;width:100%" cellpadding=3D"0=
" cellspacing=3D"0">
...

我已经为此工作了一天多,我完全被难住了。我已经尝试从传入的行中修剪尾随的“=”,但它没有给我预期的结果。相反,它似乎从内容中看似随机的位置删除了随机“=”。我猜它不是随机的,但它看起来只是因为它不是我所期望的。如果它恰好是 1024 k/char 行的最后一个字符,它可能只会删除它,但如果这是真的,那么自动换行又是从哪里来的呢?我不太了解这是如何自己解决问题的。

为什么要包装?“=”从哪里来?有没有人有什么建议?

4

3 回答 3

2

电子邮件通常以引用的可打印格式编码(http://en.wikipedia.org/wiki/Quoted-printable

您可以使用解码它quoted_printable_decode()- 这是由您的电子邮件客户端自动完成的,这就是为什么看起来 php 正在添加这些字符的原因。

http://www.php.net/manual/en/function.quoted-printable-decode.php

于 2014-05-01T19:49:09.453 回答
0

来自电子邮件

每行尾随“=”

表示电子邮件可能是引用可打印编码的。您需要正确解析消息并通过quoted_printable_decode().

有一些Content-Type标头会告诉您使用哪种编码,可能还有您需要处理的 MIME 部分和边界。

于 2014-05-01T19:49:20.740 回答
0

您的数据采用带引号的可打印格式,用于quoted_printable_decode对其进行解码:

$email = quoted_printable_decode(file_get_contents("php:://stdin"));
于 2014-05-01T19:50:27.943 回答