У меня проблемы с отправкой 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 – их можно оставить обработанными почтовыми клиентами.