C#HtmlEncode,然后使用.innerHTML插入Javascript
下面是一段文本,在发送到浏览器(在回调期间)之前用C#进行HtmlEncoded。收到后,在Javascript中我会执行以下操作C#HtmlEncode,然后使用.innerHTML插入Javascript,c#,javascript,html,C#,Javascript,Html,下面是一段文本,在发送到浏览器(在回调期间)之前用C#进行HtmlEncoded。收到后,在Javascript中我会执行以下操作 <span xmlns:asp="http://schemas.microsoft.com/ASPNET/20" xmlns:SharePoint="Microsoft.Sharepoint.WebControls" xmlns:ext="my_namespace:my_xslt_extension">Some text to
<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
”),它确实被正确添加(它被视为一个span)
发生了什么事?我必须取消编码吗?我不应该一开始就编码吗
编辑
出于好奇,这个问题仍然存在,但我只是通过不对数据进行HtmlEncoding解决了这个问题。之前的一个问题肯定已经添加到了这个问题上,这让我认为HTMLEncode仍然是必要的。HTMLEncode将变成
如果要成为HTML节点,您不应该HTMLEncode
它。HTML编码将把上面的字符串转换为:
<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>
尝试按原样传入字符串。当然,您必须转义字符串。但一旦它成为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>
//在您的Web表单/视图中
var mystring;
mystring=“”;
让我知道这对您有什么好处。谢谢您的回复,这是一个很有启发性的问题。虽然你没有提到如何在js中解码。。尽管如此,我还是将其标记为答案,因为我至少已经确认我没有发疯。@KyleM:用javascript中的函数链接进行了更新。更新不正确unescape
用于URL解码,而不是HTML解码。没有用于编码或解码HTML编码字符串的本机JavaScript函数。请参阅我的答案,HTML不需要解码。在将该字符串作为JavaScript字符串提供之前,只需对其进行转义。(很有可能)@Jacob:你完全正确。我快速搜索了一下,没有完全阅读。正如我在回答中所说的,您不需要在输出时对其进行编码,除非它干扰了您的传输介质(例如,不带CDATA的XML)。当我使用上面提到的跨度时,一切正常。然而,当我有真实的数据时,我会得到一个错误,说“unterminatedstringconstant”。这是否意味着我在服务器端有一个格式错误的字符串,然后将其转储到客户端?或者我需要先转义服务器上的字符串吗。。顺便说一句,正如我所说的,我给出的示例运行良好,它是从服务器发送的。无论如何,谢谢你的帮助。如果你的数据已经转义,那么当你再次尝试转义时,我可以看到这个错误发生。但在没有看到您的实际实现之前,我无法确定。另外,@KyleM我需要知道是什么系统产生了这个错误。这是JavaScript错误还是C#编译器错误?
<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>