我正在尝试将电子邮件处理到我的应用程序中,一切都很顺利,直到我收到一个用户的电子邮件,其邮件服务器强制执行邮件文本的自动换行。我知道自动换行是RFC规范的一部分,所以我只是在寻找处理它的最佳方式,以获得漂亮的显示消息。
原始电子邮件:
这里是我的主要问题。当我发送一条消息时,文本被奇怪地分开了。它几乎看起来像消息本身已经破裂了。但我不确定为什么会这样,因为我的原始电子邮件看起来根本不像那样。
接收到的电子邮件如下(使用CRLF来标记邮件服务器插入它们的位置):
这里是我的主要问题。当我发送一条消息时,文本被奇怪地分开了。它几乎看起来像消息本身已经破裂了。但我不确定为什么会这样,因为我的原始电子邮件看起来根本不像那样。
我的处理代码运行以下步骤,然后将结果插入数据库。
以下是显示的结果。如果我的页面上的div不够宽,浏览器会自动换行,但是nl2br()中的换行符会导致下一行很短。
以下是我的主要问题。当我发送电子邮件时,文本会被奇怪地分割。它几乎看起来像消息本身已经损坏了。我不确定为什么会这样,因为我的原始电子邮件与此完全不同。
我想也许我可以将双CRLF更改为新段落,并删除所有单个CRLF以将行连接到一个单一的行中,这样word-wrap就可以正确显示。但是,如果有人在电子邮件中发布以下项目列表,那么该列表将会中断。
这是我的列表 - 项目1 - 项目2 等等...
非常感谢您的帮助。
原始电子邮件:
这里是我的主要问题。当我发送一条消息时,文本被奇怪地分开了。它几乎看起来像消息本身已经破裂了。但我不确定为什么会这样,因为我的原始电子邮件看起来根本不像那样。
接收到的电子邮件如下(使用CRLF来标记邮件服务器插入它们的位置):
这里是我的主要问题。当我发送一条消息时,文本被奇怪地分开了。它几乎看起来像消息本身已经破裂了。但我不确定为什么会这样,因为我的原始电子邮件看起来根本不像那样。
我的处理代码运行以下步骤,然后将结果插入数据库。
$dirty_string = nl2br($dirty_string);
$config = HTMLPurifier_Config::createDefault();
$config->set('AutoFormat.RemoveEmpty', 'true');
$config->set('AutoFormat.RemoveEmpty.RemoveNbsp', 'true');
$config->set('HTML.Allowed', 'a[href],br,p');
$purifier = new HTMLPurifier($config);
$clean_string = $purifier->purify($dirty_string);
以下是显示的结果。如果我的页面上的div不够宽,浏览器会自动换行,但是nl2br()中的换行符会导致下一行很短。
以下是我的主要问题。当我发送电子邮件时,文本会被奇怪地分割。它几乎看起来像消息本身已经损坏了。我不确定为什么会这样,因为我的原始电子邮件与此完全不同。
我想也许我可以将双CRLF更改为新段落,并删除所有单个CRLF以将行连接到一个单一的行中,这样word-wrap就可以正确显示。但是,如果有人在电子邮件中发布以下项目列表,那么该列表将会中断。
这是我的列表 - 项目1 - 项目2 等等...
非常感谢您的帮助。