为了避免 Postfix 在之后smtp_line_length_limit
(通常是 998 个字符)包装超长行,我目前正在使用php 的 tidy 库在 HTML 电子邮件中包装长行(请参阅相关问题):
$oTidy = new tidy();
$message = $oTidy->repairString($message,
array("show-errors" => 0, "show-warnings" => false, "force-output" => true,
"alt-text" => "Please display images", "bare" => true, "doctype" => "auto",
"drop-empty-paras" => false, "fix-bad-comments" => false, "fix-uri" => true,
"join-styles" => false, "merge-divs" => true, "merge-spans" => true,
"preserve-entities" => true, "wrap" => 68),
"utf8"
);
在保持 HTML 和 CSS 有效方面,Tidy 非常擅长包装长行。
不幸的是,它更像是尝试修复无效的 HTML 标记、更改 HTML 标记、文档类型等。
然而,我只需要换行 - tidy 所做的其他事情是开销,有时比其他任何事情都烦人。
现在我尝试使用PHPMailer的wrapText()
功能。不幸的是,我发现了一个对我来说毫无用处的错误。
PHPMailer 转换此源代码
<html>
<body>
Loremipsumdolorsitametconsetetursadipscing<span style="font-family:'Courier New',sans-serif">lorem</span>
</body>
</html>
至
<html>
<body>
Loremipsumdolorsitametconsete<span style="font-family:'Courier
New',sans-serif">lorem</span>
</body>
</html>
在某些客户端中破坏了单词 lorem 的字体格式(Courier New)。
现在我的问题:
如何在不损坏 HTML 和 CSS 的情况下安全地换行 HTML 行?
Tidy 是如何做到的?我应该使用 DOM 解析器吗?是否有 php 版本的 Tidy 源代码(我还没有找到)?