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

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

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

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

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

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

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

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

tidy :: repairString shoud делает работу просто отлично, лучше, чем любое регулярное выражение.

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

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

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

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