2010-10-21 66 views
2

我有一個應用程序允許用戶將HTML粘貼複製到一個形式。這個html被作爲電子郵件發送,並且email server will not allow more than 1000 characters per line。所以,我想在用戶點擊提交後在html中插入換行符(\ r \ n)。我如何在不改變內容的情況下做到這一點?安全插入換行符HTML

我的想法是這樣的:

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

但是,這是保證不改變結果?屬性中不允許'<'?

編輯:實際上,我想這是行不通的,因爲HTML可以有一個腳本塊的東西一樣,如果(X < 3)。我想我需要的是一個HTML漂亮的打印機,可以在js或C#中工作。

+0

是您控制的html源代碼 – 2010-10-21 14:09:01

+0

是的,在技術上。然而,我們必須做一些後處理,包括將html粘貼到div的innerHTML中,這完全混淆了換行格式。 – 2010-10-21 15:21:59

+0

您不應該將任何腳本作爲HTML電子郵件的一部分發送。你應該刪除它。這實際上是我的軟件中的一個選項。 – 2010-10-22 12:30:30

回答

0

我不知道你是如何傳遞的郵件...如果它被傳遞到PHP腳本,然後將其發送到郵件服務器或使用電子郵件()方法,那麼這個鏈接可能會有所幫助。

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

如果沒有,你能澄清你的問題一點?

另一個簡單的想法是,你可以使用: html.replace('','\ r \ n'); 或: html.replace( '', '' +使用String.fromCharCode(13)); //插入一個回車

然而,由於將理想地在瀏覽器中被解析,插入爲「\ r \ n 「未必是有效的,可實際上只是顯示爲‘\ r \ n’....

任何希望這是有幫助的。

1

電子郵件MIME標準使用transfer encoding技術來解決這個問題。理想情況下,您將使用一個爲您處理此問題的郵件庫,因此您可以插入任意長度的行。

使用C#中的System.Net.Mail.MailMessage類,你應該能夠建立正常的消息,它會轉移編碼它。如果這不起作用,您也可以使用一個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); 
    } 
} 
+0

我希望我們能做到這一點。不幸的是,我們的軟件被部署到客戶端的服務器上,並掛接到他們的電子郵件服務器上,這是我們無法控制的。 – 2010-10-21 15:18:03

+0

等待,而不是發送此消息,我可以將它作爲字符串返回嗎? – 2010-10-21 15:19:59

+0

您可以在web.config文件中配置SMTP設置,以使用憑據指向任何郵件服務器。 – roryf 2010-10-22 09:20:34

1

如果您的Base64編碼的內容,那麼你就可以打破將內容轉換爲您想要的許多行。

+0

所以,這個想法是發送一個他們剛剛打開的html電子郵件。如果我base64編碼它,這仍然是工作,或者是內容將成爲一個附件?所有電子郵件服務器都能自動識別base64編碼/解碼嗎? – 2010-10-25 14:42:18

+0

我假設您將表單提交發回到每行限制爲1000個字符的服務器。對於誤會感到抱歉。如果您仍然將表單提交發送回服務器,則可以解析標記並將其打印出來。如果你直接從表單發送(你可以這樣做嗎?),那麼也許你可以用jQuery解析標記並重新格式化它 - 但我不確定這是否可能。 – Collin 2010-10-25 16:21:56

1

你進入dangerous territory試圖與替換功能來解析HTML。最簡單的方法是在窗體上顯示一個警告框,告訴用戶線條不能超過1000個字符,並且如果他們嘗試使用超過該長度的線條提交內容,則會返回錯誤消息。

否則,你可以插入後面的字符的X個斷行,並插入一些特殊標記(如< - !AUTO-LINEBREAK - >或類似),該通知誰正在接收的E-mail插入了自動換行符。

+0

哈哈我以爲我在解析html之前就看到了這個答案。不幸的是,我們必須對用戶輸入的HTML進行一些後置處理,將HTML插入到div的innerHTML中。 innerHTML喜歡用自己的換行符設置格式化html。 – 2010-10-21 15:16:42

1

在你認爲應該是的地方添加正常換行符。例如:

關閉我的頭頂,找到所有<p><table><tr><td><br>,並<div>標籤和他們的眼前添加\r\n

一旦完成,再次遍歷所有行。如果有任何長度仍然超過1000個字符,我會在空白處插入\r\n

此外,您應該從HTML電子郵件正文中刪除任何腳本標記。具有腳本標記可能會導致所有類型的問題(標記爲垃圾郵件,標記爲病毒,阻止等)。