我正在尝试设置一个临时的Sharepoint页面,该页面显示一个表单,用户可以在其中输入一些文本并通过电子邮件发送。所以我有一个包含表单和提交按钮的页面,它调用一些JS将输入的文本放入Sharepoint的SOAP请求中,然后将其添加到列表中,然后发送包含该信息的电子邮件。到目前为止这么好,而且相当无痛。
我遇到的问题是Outlook忽略了任何属于输入文本的换行符。它们不被任何东西剥离,因为我可以使用“查看源”选项并在记事本中正常查看它们。我认为这是因为Outlook试图将消息显示为HTML并且不知道如何处理它们。通常,我只是抛出一些JS,用\r\n
标签替换<br />
的所有实例,但是将它放入SOAP请求只会导致标记在被添加到标记之前被删除。 Sharepoint列表。
我尝试过的其他事情是
\r\n
(无更改)\r\n
的所有实例替换为%0D%0A
(显示为文字)\r\n
的所有实例替换为\par
(实际使用\\par
,以逃避第一个反斜杠)。 (显示为文字)\t
附加到\r\n
的所有实例。 (没有变化)\r\n
的所有实例。 (显示的时间段,但没有换行)我正在使用Outlook 2007,Sharepoint 2007和Internet Explorer 8。
我读过这些问题:
这是我正在使用的JS函数来编辑文本,以及创建和POST SOAP请求。它目前设置为在每个换行符之前放置一段时间:
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 />
后将其更改为{{1}}专栏?或者我在Javascript中错过了一个角度?
答案 0 :(得分:1)
您需要在代码中对所有HTML标记进行编码。含义为
& → & (ampersand)
< → < (less-than sign)
> → > (greater-than sign)
" → " (quotation mark)
' → ' (apostrophe)
请尝试以下代码:
String Input = "adding this text <br/> this in next line <>";
String Output = Server.HtmlEncode(Input);
//
如果需要
Output = Output.Replace("\r\n", "<br />");