PHP从stdin读取后在每一行上给出一个尾随“=”

时间:2014-05-01 19:44:18

标签: php stdin word-wrap fread trailing

stdin的内容被自动翻译破坏,尾随“=”,这显然会破坏我需要发布的网址。

我需要从电子邮件中提取网址/链接,然后发布网址。所以,我正在使用我在互联网上看到的标准代码片段将我的电子邮件发送到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行的最后一个字符,它可能只是删除它但是如果这是真的那么wordwrapping来自哪里呢?我不知道如何解决这个问题。

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

3 个答案:

答案 0 :(得分:2)

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

进行编码

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

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

答案 1 :(得分:0)

  

来自电子邮件

  

每行尾随“=”

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

Content-Type个标题可以告诉您使用了哪种编码,以及您可能需要处理的MIME部分和边界。

答案 2 :(得分:0)

您的数据采用quoted-printable格式,请使用quoted_printable_decode对其进行解码:

$email = quoted_printable_decode(file_get_contents("php:://stdin"));