在PHP中,长串字符串因未知原因而中断

时间:2015-06-12 20:48:04

标签: php

我正在生成一封电子邮件,我注意到我的一些内联CSS样式没有正确显示。经过进一步调查,似乎我的输出在整个字符串中随机获得换行符。这是PHP发生换行的部分

<?php
$message .= '<ul style="list-style:none">';
foreach ($fileLinks as $key => $value)
{
  $message .= '<li><a style="font-family:sans-serif;background:#1F6FA9;color:#fff;padding:5px;text-decoration:none;border-radius:3px;margin-bottom:10px;display:inline-block;" href="' . $value . '">Download ' . $fileNames[$key] . '</a></li>';
}
$message .= '</ul>';
?>

这对我来说很好看

输出的一个示例,其中字符串断开并转到一个新的行搞乱我的内联css将是(我添加行号以使其更容易阅读):

1. <ul style="list-style:none">
2.     <li><a style="font-family:sans-serif;background:#1F6FA9;color:#fff;padding:5px;text-decoration:none;border-radius:3px;margin-
3. bottom:10px;display:inline-block;" href="http://myserver.com/file-transfer/download.php?i=Li4vdXBsb2Fkcy8wNi0xMi0yMDE1L2JnLmpwZw==">Download bg.jpg</a></li>
4.     <li><a style="font-family:sans-serif;background:#1F6FA9;color:#fff;padding:5px;text-decoration:none;border-radius:3px;margin-bottom:10px;display:inline-block;" href="http://myserver.com/file-transfer/download.php?i=Li4vdXBsb2Fkcy8wNi0xMi0yMDE1L3NsaWRlMS5qcGc=">Download slide1.jpg</a></li>
5.     <li><a style="font-family:sans-serif;background:#1F6FA9;color:#fff;padding:5px;text-decoration:none;border-radius:3px;margin-bottom:10px;display:inline-block;" href="http://myserver.com/file-transfer/download.php?i=Li4vdXBsb2Fkcy8wNi0xMi0yMDE1L3NsaWRlMS5wZGY=">Download slide1.pdf</a></li>
6.     <li><a style="font-family:sans-serif;background:#1F6FA9;color:#fff;padding:5px;text-decoration:none;border-radius:3px;margin-bottom:10px;display:inline-block;" href="http://myserver.com/file-transfer/download.php?i=Li4vdXBsb2Fkcy8wNi0xMi0yMDE1L3NsaWRlMi5qcGc=">Downlo
7. ad slide2.jpg</a></li>
8.     <li><a style="font-family:sans-serif;background:#1F6FA9;color:#fff;padding:5px;text-decoration:none;border-radius:3px;margin-bottom:10px;display:inline-block;" href="http://myserver.com/file-transfer/download.php?i=Li4vdXBsb2Fkcy8wNi0xMi0yMDE1L3NsaWRlMi5wZGY=">Download slide2.pdf</a></li>
9.     <li><a style="font-family:sans-serif;background:#1F6FA9;color:#fff;padding:5px;text-decoration:none;border-radius:3px;margin-bottom:10px;display:inline-block;" href="http://myserver.com/file-transfer/download.php?i=Li4vdXBsb2Fkcy8wNi0xMi0yMDE1L3NsaWRlMy5qcGc=">Download slide3.jpg</a></li>
10.    <li><a style="font-family:sans-serif;background:#1F6FA9;color:#fff;padding:5px;text-decoration:none;border-radius:3px;margin-bottom:10px;display:inline-block;" href="http://myserver.com/file-transfer/download.php?i=Li4vdXBsb2Fkcy8wNi0xMi0yMDE1L3NsaWRlMy5wZGY=">Download slide3.pdf</a></li>
11. </ul>

我无法找到换行符或原因的一致性。有任何想法吗?它在第2-3和第6-7行间断开。

以下是我的标题和send,以防您需要引用它

<?php
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: file-transfer@myserver.com <file-transfer@myserver.com>' . "\r\n";
$headers .= 'Reply-To: '. $request->email . "\r\n";

$send = @mail('me@gmail.com', 'New Files from Secure File Transfer', $message, $headers);
?>

我尝试过preg_replace来删除任何\ n或\ r

1 个答案:

答案 0 :(得分:1)

电子邮件具有线路硬盘和建议的线路长度限制,详见IETF RFC 5322 on "Internet Message Format - IETF Tools"。您可以使用PHPMailerPEAR Mail等电子邮件库来简化电子邮件处理。

  

2.1.1。线长限制

     

此规范对数量有两个限制      一行中的字符。每行字符必须不超过      998个字符,不应超过78个字符,不包括      CRLF。

     

998字符限制是由于许多实现中的限制      发送,接收或存储无法处理的IMF消息      一行超过998个字符。接收实施会      做好处理一行中任意大量的字符      为了健壮。但是,有很多实现      (符合[RFC5321]的运输要求)不      接受包含超过1000个字符的邮件,包括CR      和每行LF,对于不创建的实现很重要      这样的消息。

     

更为保守的78字符建议是适应      显示这些的用户界面的许多实现      可能截断或灾难性地包装显示的消息      尽管如此,每行超过78个字符      实现不符合此意图      规范(和[RFC5321]的规范,如果它们确实导致      信息丢失)。同样,尽管存在这种限制      在消息上,显示的实现是有责任的      用于处理a中任意大量字符的消息      为了这个缘故(肯定至少达到998字符限制)      坚固性。