2017-10-05 120 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是一个符号(而不是\和之后的字符吧)在字符串中,\\瓦特应该代表\