C#HtmlEncode,然后使用.innerHTML插入Javascript

时间:2011-03-23 23:28:00

标签: c# javascript html

以下是在发送到浏览器之前(在回调期间)在C#中获取HtmlEncoded的文本。收到后,在Javascript中我会myDiv.innerHTML = theStringBelow;

<span xmlns:asp="http://schemas.microsoft.com/ASPNET/20" 
      xmlns:SharePoint="Microsoft.Sharepoint.WebControls"
      xmlns:ext="my_namespace:my_xslt_extension">Some text to be shown.</span>

然而,结果是我只看到上面显示的确切文字。它不被视为添加到DOM的html元素,而是纯文本。当我通过javascript添加完全相同的文本时(例如,我跳过回调,只说myDiv="exactString“),它会被正确添加(它被视为跨度)。

发生了什么事?我必须取消编码吗?我不应该编码开始吗?

修改 这个问题仍然代表着好奇心,但我只是通过HtmlEncoding数据来解决这个问题。早期的问题必须添加到这个问题上,让我觉得HtmlEncoding仍然是必要的。

2 个答案:

答案 0 :(得分:2)

如果要成为HTML节点,则不应HTMLEncode。 HTML编码的作用是将您的字符串从上面转换为:

&lt;span xmlns:asp="http://schemas.microsoft.com/ASPNET/20" 
  xmlns:SharePoint="Microsoft.Sharepoint.WebControls"
  xmlns:ext="my_namespace:my_xslt_extension"&gt;Some text to be shown.&lt;/span&gt;

尝试按原样传入字符串。你当然必须逃避字符串。但是一旦它成为JavaScript中的一个字符串,它应该被转义,因为它被制作成内存中的字符串。然后,您应该能够进行div.innerHTML调用并获得预期结果。可以通过执行以下操作来完成字符串的转义:

// in your .cs code-behind/view/whatever.
string = string.replace("""", "\""");

哪个应该产生:

<span xmlns:asp=\"http://schemas.microsoft.com/ASPNET/20\" 
  xmlns:SharePoint=\"Microsoft.Sharepoint.WebControls\"
  xmlns:ext=\"my_namespace:my_xslt_extension\">Some text to be shown.</span>

然后你可以这样输出:

// in your webform/view
<script type="text/javascript">
  var mystring;
  mystring = "<%=string;%>";
</script>

让我知道这对你有用。

答案 1 :(得分:0)

HTML Encode会将<变为&lt;,依此类推。这打破了HTML格式化,因此使用了这样的文本块:

Insert <name> here

不会这样:

Insert  here

如果您的意图是直接将<span ...插入到html中,您需要在出路时不对其进行编码,或者如果这会中断传输,则需要在设置之前在js中对其进行解码.innerHTML部分。