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