2011-06-09 25 views
1

我有一个javascript方法接收UTF-8编码的字符串(ViewBag.errorText),并将其用作一个新函数的参数。错误的文本编码字符串发送到JavaScript

问题是显示在show_error_dialog中的文本正在显示html转义字符(æ&#248 etc')而不是打算的(“æåø”等)。

我认为问题是封闭的<text>标签,但似乎无法解决此问题。

<script type="text/javascript" charset="utf-8"> 
    function performLoadOperations() { 
     @if(ViewBag.errorText!= null) { 
      <text>show_error_dialog('@ViewBag.errorText');</text> 
     } 
    } 
</script> 

回答

6

我认为所有插入剃须刀的文本默认都是HTML编码的。使用Html.Raw()传递字符串未编码。

<script type="text/javascript" charset="utf-8"> 
    function performLoadOperations() { 
     @if(ViewBag.errorText!= null) { 
      <text>show_error_dialog('@Html.Raw(ViewBag.errorText)');</text> 
     } 
    } 
</script> 
+0

感谢 - 这是它! – user204884 2011-06-09 11:08:10

+1

这会向您显示XSS漏洞,您需要重新编码errorText以插入到javascript中。 – 2012-01-11 23:16:30

0

我不确定,但我认为有js的unescape()函数。尝试通过你的文字。这可能有助于

0

只需使用javascript escape功能:

function encode_utf8(s) 
{ 
    return unescape(encodeURIComponent(s)); 
} 

function decode_utf8(s) 
{ 
    return decodeURIComponent(escape(s)); 
} 
1

用途: @ Html.Raw(Ajax.JavaScriptStringEncode(型号))

安全值插入JavaScript的