2017-10-05 78 views
1

我從ASP.net <%=HttpContext.Current.User.Identity.Name%>設置一個javascript變量JavaScript變量丟失字符

var username = '<%=HttpContext.Current.User.Identity.Name%>'; 

輸出「域sername」

它基本上拿出反斜槓和用戶名的第一個字母。爲什麼要刪除這兩個字符?

+4

這比JavaScript的最有可能更多地與ASP.net。 – TKoL

+0

無法複製所描述的行爲。在我的例子中,我確實在頁面源代碼中看到'var username ='domain \ username';'。也許問題是更多的下游你使用'用戶名'? – David

+1

@TKoL我不同意,JS導致字符串被解析\字符作爲轉義字符。詳情請參閱下文。 – DanteTheSmith

回答

1

你在做什麼實際衝壓是這樣的:

var username = 'domain\username'; 

\u被視爲JavaScript字符串中的轉義序列。根據用戶名的實際情況,您會看到不同的結果,從換行符到製表符到語法錯誤。

你需要正確編碼它使用類似HttpUtility.JavaScriptStringEncode在服務器上:

var username = '<%=HttpUtility.JavaScriptStringEncode(HttpContext.Current.User.Identity.Name)%>'; 
+0

非常感謝你! – user3511786

0

在JS(任何許多其他語言)中\用於具有特殊角色的字符串,稱爲ESCAPE CHARACTER。您需要使用\\得到\一個字符串,測試它在控制檯:

console.log("\"); 
console.log("\\"); 

這是你是如何形成的特殊字符,如\n線路斷線等。

我覺得這些都是個案當你在JS使用轉義字符:

\' single quote 
\" double quote 
\\ backslash 
\b Backspace 
\r Carriage Return 
\f Form Feed 
\t Horizontal Tabulator 
\v Vertical Tabulator 

長話短說,JS認爲\character是一個符號(而不是\和之後的字符吧)在字符串中,\\瓦特應該代表\