2

我正在尝试设置一个临时的 Sharepoint 页面,该页面提供一个表单,用户可以在其中输入一些文本并将其通过电子邮件发送出去。因此,我有一个包含表单和提交按钮的页面,该按钮调用一些 JS 将输入的文本放入 Sharepoint 的 SOAP 请求中,该请求将其添加到列表中,然后发送包含该信息的电子邮件。到目前为止一切顺利,而且非常无痛。

我遇到的问题是 Outlook 会忽略作为输入文本一部分的任何换行符。它们不会被任何东西删除,因为我可以使用“查看源代码”选项并在记事本中正常查看它们。我认为这是因为 Outlook 试图将消息显示为 HTML 并且不知道如何处理它们。通常情况下,我只是放入一些 JS 来替换\r\nwith<br />标签的所有实例,但将其放入 SOAP 请求只会导致标签后面的任何内容在添加到 Sharepoint 列表之前被切断。

我尝试过的其他事情是

  • 在每个新行的开头添加一对空格(无变化)
  • \r\n为每个换行符添加了第二组(没有变化)
  • \r\n替换了with的所有实例%0D%0A(显示为文本)
  • 将所有实例替换为\r\n\par实际使用\\par,以转义第一个反斜杠)。(显示为文本)
  • 附加\t\r\n. (没变)
  • 前置'.' 的所有实例\r\n。(显示句点,但不显示换行符)

我正在使用 Outlook 2007、Sharepoint 2007 和 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 更好,但是在 Sharepoint 2007 中有没有办法让脚本<br />在数据已经添加到列后将换行符更改为?还是我在 Javascript 中遗漏了一个角度?

4

1 回答 1

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 />");
于 2012-11-20T12:43:27.870 回答