2011-06-09 71 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的