HTML безопасная упаковка длинных строк

у меня проблемы с отправкой HTML-писем с длинными строками текста. Редактор WYSIWYG (FCKEditor 2.5), используемый на сайте, продолжает удалять все n символы в некоторых браузерах, включая IE и Chrome. Результатом является электронное письмо с одной огромной строкой текста. Это не было бы проблемой, если бы не почтовые клиенты, которые обертывают строки более 998 символов, вставляя ! n в нем. Конечно, они почти всегда оказываются в самых неудачных местах, разбивая HTML-теги и выглядит отвратительно в самом содержании.

моим первоначальным решением было добавить ленту строк после каждого тега HTML или каждые 900 до 990 символов. Это регулярное выражение, которое я закончил:

 return preg_replace("/(</[^>]+>|<[^>]+/>|>[^<]{900,990}s)(n)*/","n",$str);

однако, когда есть строки, которые вообще не содержат тегов, соответствующая часть пробела никогда не запускается. Но если я удалю > С самого начала он начинает ломать теги.

есть ли лучший способ сделать это, чем регулярное выражение, или это регулярное выражение может быть исцелен?

EDIT: предел длины строки 1000 символов определяется в RFC 821.

2 ответов


следуя моему комментарию, я публикую это, поскольку я смог запустить тест.

tidy:: repairString shoud делает работу просто отлично, лучше, чем любое решение regex.

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

адаптируйте параметр Charset (3rd) к вашим потребностям.

опция clean не нужна для этого, я был неправ в своем комментарии.


Если я все правильно понимаю, вам не нужно беспокоиться о строках, которые вообще не содержат HTML - их можно оставить для обработки почтовыми клиентами.