繁体   English   中英

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

[英]C# HtmlEncode, then Javascript insert using .innerHTML

接下来是一段文本,在发送到浏览器之前(在回调期间)在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仍然是必要的。

如果要成为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>

让我知道这对你有什么影响。

HTML Encode将转入< into &lt; 等等。 这会打破HTML格式,并使用这样的文本块:

Insert <name> here

结果不是这样的:

Insert  here

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM