2012-09-27 31 views
2

我試圖設置一個臨時Sharepoint頁面,其中顯示一個表單,用戶可以在其中輸入一些文本並通過電子郵件發送。所以我有一個包含表單和提交按鈕的頁面,它調用一些JS將輸入的文本放入Sharepoint的SOAP請求中,該請求將其添加到列表中,然後發送包含該信息的電子郵件。到目前爲止非常好,而且非常無痛。Linebreaks在通過Sharepoint發送到Outlook的電子郵件中不顯示

我遇到的問題是Outlook忽略任何屬於輸入文本的換行符。它們不會被任何東西剝離,因爲我可以使用「查看源代碼」選項並在記事本中正常看到它們。我認爲這是因爲Outlook試圖將消息顯示爲HTML並且不知道如何處理它們。通常,我只是拋出一些JS代替\r\n的所有實例和<br />標記,但將其放入SOAP請求中只會導致標記在被添加到Sharepoint列表之前被切斷的任何內容。

我試過

其他的事情都是

  • 在每個新行的開始(無變化)
  • 增加了第二組的\r\n每一個換行符(無變化)
  • 再配上一雙的空間
  • 代替的\r\n所有實例與%0D%0A(顯示爲文本)
  • \par代替的\r\n所有實例(實際使用的\\par,以躲避第一BA ckslash)。 (顯示爲文本)
  • 附加\t\r\n的所有實例。 (無變化)
  • 前綴'。'到\r\n的所有實例。 (時間顯示,但換行沒有)

我與Outlook 2007,SharePoint和Internet Explorer的工作8.

我讀過的問題:

這是我正在編輯的文本以及創建和發佈SOAP請求的JS函數。它是目前設置的每個斷行前放置時間:

function createAndPostSOAP(siteURL, listName) 
    { 
     var moreText = $("#MoreText")[0].innerText; 

     var linebreakCount = moreText.match(/\r\n/g); 

     moreText= " " + moreText; 
     for (var count = linebreakCount.length; count >= 0; count--) 
     { 
      moreText = moreText.replace("\r\n", ".[replace]"); 
     } 

     while(moreText.indexOf("[replace]") != -1) 
     { 
      moreText = moreText.replace("[replace]", "\r\n"); 
     } 

     var batch = 
      "<Batch OnError='Continue'> \ 
        <Method ID='1' Cmd='New'> \ 
         <Field Name='Text'>" + $("Text")[0].value + "</Field> \ 
         <Field Name='MoreText'>" + moreText + "</Field> \ 
        </Method> \ 
      </Batch>"; 

     var soapEnv = 
       "<?xml version='1.0' encoding='utf-8'?> \ 
      <soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' \ 
       xmlns:xsd='http://www.w3.org/2001/XMLSchema' \ 
       xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'> \ 
       <soap:Body> \ 
       <UpdateListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \ 
        <listName>" + listName + "</listName> \ 
        <updates> \ 
        " + batch + "</updates> \ 
       </UpdateListItems> \ 
       </soap:Body> \ 
      </soap:Envelope>"; 

     $.ajax({ 
     url: siteURL + "/_vti_bin/lists.asmx", 
     beforeSend: function(xhr) { 
      xhr.setRequestHeader ("SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/UpdateListItems"); 
     }, 
     type: "POST", 
     dataType: "xml", 
     data: soapEnv, 
     contentType: "text/xml; charset=utf-8" 
     }); 
    window.location='starting_page.htm'; 
    } 

我主要從JavaScript結束攻擊這一點,因爲我知道比改善SharePoint,但有2007年的Sharepoint的方式有一個腳本變化一旦數據已經添加到列中,則換行爲<br />?或者在Javascript中錯過了一個角度?

回答

1

您需要對代碼中的所有HTML標籤進行編碼。意爲

&amp; → & (ampersand) 
&lt; → < (less-than sign) 
&gt; → > (greater-than sign) 
&quot; → " (quotation mark) 
&apos; → ' (apostrophe) 


試試下面的代碼:

String Input = "adding this text <br/> this in next line <>"; 
String Output = Server.HtmlEncode(Input); 
// 

如果需要

Output = Output.Replace("\r\n", "<br />"); 
相關問題