HTML安全包装长行

Kai*_*aja 6 php regex email

我在发送带有长行文本的HTML电子邮件时遇到问题.网站上使用的WYSIWYG编辑器(FCKEditor 2.5)不断删除\n某些浏览器上的所有字符,包括IE和Chrome.结果是一封包含大量文本的电子邮件.如果不是电子邮件客户端通过插入包装超过998个字符的行,这不会是一个问题! \n.当然,这些几乎总是在最不幸的地方,打破HTML标签,并在内容本身看起来讨厌.

我最初的解决方案是在每个HTML标记后或每900到990个字符后添加换行符.这是我最终得到的正则表达式:

 return preg_replace("/(<\/[^\>]+>|<[^\>]+\/>|>[^<]{900,990}\s)(\n)*/","$1\n",$str);
Run Code Online (Sandbox Code Playgroud)

但是,当存在根本不包含任何标记的行时,永远不会触发空白匹配部分.但是,如果我>从它开始删除它,它会开始打破标签.

有没有比正则表达式更好的方法来做到这一点,或者这个正则表达式能够愈合吗?

编辑: 1000字符行长度限制在RFC 821中定义.

Yan*_*lin 3

根据我的评论,我发布此内容是因为我已经能够运行测试。

tidy::repairString应该可以很好地完成工作,比任何正则表达式解决方案都要好。

$content = "<html>......</html>";
$oTidy = new tidy();
$content = $oTidy->repairString($content,
    array("show-errors" => 0, "show-warnings" => false),
    "utf8"
);
Run Code Online (Sandbox Code Playgroud)

根据您的需要调整字符集参数(第 3 个)。

为此不需要 clean 选项,我的评论是错误的。