我正在尝试将电子邮件处理到我的应用程序中,并且一切似乎都工作正常,直到我收到来自其邮件服务器正在强制邮件文本自动换行的用户的电子邮件。我知道自动换行是 RFC 规范的一部分,所以我只是在寻找处理它的最佳方法,以得到一个显示良好的消息。
原始电子邮件:
这是我的主要问题。当我通过电子邮件发送消息时,文本被分解得相当奇怪。它几乎看起来好像消息本身已损坏。我不确定为什么会这样,因为我的原始电子邮件看起来不像那样。
这是收到的电子邮件的样子(标有 CRLF 以显示邮件服务器将它们插入的位置):
这是我的主要问题。
当我通过电子邮件发送消息时,文本被奇怪地分解为 CRLF 。它几乎看起来好像消息本身已损坏。我不确定 CRLF
为什么会这样,因为我的原始电子邮件看起来不像 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 以将这些行连接到一个可以正确显示自动换行的单行。但是,如果有人在电子邮件中发布以下项目符号列表,那将破坏该列表。
这是我的清单 CRLF
- 第 1 项 CRLF
- 第 2 项 CRLF
等...
任何帮助将不胜感激。