Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#HtmlEncode,然后使用.innerHTML插入Javascript_C#_Javascript_Html - Fatal编程技术网

C#HtmlEncode,然后使用.innerHTML插入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

下面是一段文本,在发送到浏览器(在回调期间)之前用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 be shown.</span>
一些要显示的文本。
然而,结果是我只看到了上面显示的确切文本。它不是作为添加到DOM中的html元素处理的,而是作为纯文本处理的。当我通过javascript添加完全相同的文本时(例如,我跳过回调,只说
myDiv=“exactString
”),它确实被正确添加(它被视为一个span)

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

编辑
出于好奇,这个问题仍然存在,但我只是通过不对数据进行HtmlEncoding解决了这个问题。之前的一个问题肯定已经添加到了这个问题上,这让我认为HTMLEncode仍然是必要的。

HTMLEncode将变成
如果要成为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>
//在您的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>