2

ユーザーがhtmlをコピーしてフォームに貼り付けることができるアプリケーションがあります。この HTML はメールとして送信され、メール サーバーは 1 行あたり 1000 文字を超えることを許可しません。したがって、ユーザーが送信を押した後、html に改行 (\r\n) を挿入したいと思います。コンテンツを変更せずにこれを行うにはどうすればよいですか?

私の考えはこれです:

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

しかし、それは結果を変えないことが保証されていますか? '<' は属性に使用できませんか?

編集:HTMLにはif(x <3)のようなスクリプトブロックがある可能性があるため、実際にはこれは機能しないと考えています。私が必要としているのは、js または C# で動作する HTML プリティ プリンターだと思います。

4

5 に答える 5

1

通常の改行を追加する必要があると思われる場所に追加します。例えば:

頭のてっぺんから、、、、、、およびタグをすべて見つけて<p>、それらの前に右を追加します。<table><tr><td><br><div>\r\n

それが完了したら、すべての行をもう一度ループします。まだ 1000 文字以上の長さがある場合は\r\n、空白に a を挿入します。

また、HTML メール本文からスクリプト タグを削除する必要があります。スクリプト タグを使用すると、あらゆる種類の問題 (スパムとしてマークされる、ウイルスとしてマークされる、ブロックされるなど) が発生する可能性があります。

于 2010-10-22T12:40:54.587 に答える
1

電子メールMIME標準では、転送エンコード技術を使用してこの問題を解決しています。理想的には、これを処理してくれるメール ライブラリを使用して、任意の長さの行を挿入できるようにします。

C# でクラスを使用するSystem.Net.Mail.MailMessageと、通常のメッセージを作成できるはずであり、転送エンコードされます。それが機能しない場合は、単一のマルチパート メッセージを作成しSystem.Net.Mail.AlternativeView、転送エンコーディングを明示的に設定することもできます。

これは私が現在使用しているサンプルです(文字エンコーディングのバグがあるため、本文テキストはユニコード文字列でなければなりません):

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);
    }
}
于 2010-10-21T14:11:47.377 に答える
1

コンテンツを Base64 でエンコードすると、コンテンツを必要な数の行に分割できます。

于 2010-10-21T14:14:35.753 に答える
1

置換関数を使用して HTML を解析しようとすると、危険な領域に入り込んでいます。最も簡単な方法は、行が 1000 文字を超えることはできないことをユーザーに知らせる警告ボックスをフォームに表示し、その長さを超える行を含むコンテンツを送信しようとするとエラー メッセージを返すことです。

それ以外の場合は、X 文字の後に改行を挿入し、自動改行が挿入されたことを電子メールの受信者に通知する特別なマークアップ ( <!--AUTO-LINEBREAK-->など) を挿入することができます。 .

于 2010-10-21T14:20:17.140 に答える
0

メールをどのように配信しているかわかりません...それがphpスクリプトに渡され、メールサーバーに送信されるか、mail()メソッドを使用する場合、このリンクが役立つ場合があります.

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

そうでない場合は、質問を少し明確にしてもらえますか?

別の単純な考えは、次を使用できるということです: html.replace('','\r\n'); or: html.replace('',''+String.fromCharCode(13));//改行を挿入します

ただし、理想的にはブラウザで解析されるため、「\r\n」を挿入しても効果がなく、実際には「\r\n」と表示されるだけの場合があります....

これが役立つことを願っています。

于 2010-10-21T14:05:32.917 に答える