Безопасно вставляйте разрывы строк в HTML - PullRequest
2 голосов
/ 21 октября 2010

У меня есть приложение, позволяющее пользователю скопировать вставить HTML в форму. Этот html-файл отправляется в виде электронного письма, и почтовый сервер не может содержать более 1000 символов в строке . Итак, я хотел бы вставить разрывы строк (\ r \ n) в html после того, как пользователь нажал на submit. Как я могу сделать это без изменения содержимого?

Моя идея такова:

html.replace('<', '\r\n<');

Но гарантированно ли это не изменит результат? Разрешено '<' в атрибутах? </p>

Редактировать : Я на самом деле думаю, что это не сработает, потому что HTML может иметь блок скрипта с чем-то вроде if (x <3). Думаю, мне нужен HTML-принтер, работающий на js или C #. </p>

Ответы [ 5 ]

1 голос
/ 22 октября 2010

Добавьте нормальные разрывы строк там, где вы думаете, они должны быть.Например:

В верхней части головы найдите все теги <p>, <table>, <tr>, <td>, <br> и <div> и добавьте \r\n вправо.перед ними.

Как только это будет сделано, переберите все строки еще раз.Если есть строки длиной более 1000 символов, я бы вставил в пробел \r\n.

Кроме того, вы должны удалить все теги сценариев из тела письма HTML.Наличие тегов сценария может вызвать все типы проблем (помеченных как спам, помеченных как вирусы, заблокированных и т. Д.).

1 голос
/ 21 октября 2010

Вы попадаете на опасную территорию , пытаясь проанализировать HTML с помощью функции замены. Самым простым способом было бы просто отобразить в форме окно с предупреждением, которое сообщает пользователю, что строки не могут быть длиннее 1000 символов, и возвращать сообщение об ошибке, если они пытаются отправить содержимое со строками этой длины.

В противном случае вы можете вставить разрыв строки после числа символов X и вставить некоторую специальную разметку (например, <! - AUTO-LINEBREAK -> или аналогичную), которая информирует любого, кто получает е -почта, что был вставлен автоматический разрыв строки.

1 голос
/ 21 октября 2010

Электронная почта MIME стандарт использует методы кодирования передачи для решения этой проблемы.В идеале вы должны использовать почтовую библиотеку, которая позаботится об этом за вас, поэтому вы можете вставлять строки любой длины.

Используя класс System.Net.Mail.MailMessage в C #, вы должны иметь возможность создавать обычное сообщение иэто передаст-закодирует это для Вас.Если это не сработает, вы также можете создать сообщение, состоящее из нескольких частей, с одним System.Net.Mail.AlternativeView и явно установить кодировку передачи.

Вот пример, который я сейчас использую (обратите внимание, что он имеет символошибка кодирования, поэтому ваш основной текст должен быть строкой Unicode):

private void Send(string body, bool isHtml, string subject, string recipientAddress, string recipientName, string fromAddress)
{
    using (var message = new MailMessage(new MailAddress(fromAddress),
                                    new MailAddress(recipientAddress, recipientName)))
    {
        message.Subject = subject;
        var alternateView = AlternateView.CreateAlternateViewFromString(body, message.BodyEncoding,
                                                                        isHtml ? "text/html" : "text/plain");
        alternateView.TransferEncoding = TransferEncoding.QuotedPrintable;
        message.AlternateViews.Add(alternateView);

        var client = new SmtpClient();

        client.Send(message);
    }
}
1 голос
/ 21 октября 2010

Если вы Base64 кодируете контент, то вы можете разбить контент на столько строк, сколько захотите.

0 голосов
/ 21 октября 2010

Я не уверен, как вы доставляете свою электронную почту ... если она передается сценарию php, который затем отправляет ее на почтовый сервер или использует метод mail (), то эта ссылка может помочь.

http://php.net/manual/en/function.wordwrap.php

Если нет, можете ли вы немного прояснить свой вопрос?

Еще одна простая мысль: вы можете использовать: html.replace ( '', '\ г \ п'); или же: html.replace ('', '' + String.fromCharCode (13)); // вставляет возврат каретки

Однако, поскольку в идеале анализ будет выполняться в браузере, вставка "\ r \ n" может быть неэффективной и может фактически отображаться как "\ r \ n" ....

Надеюсь, что все это полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...