2015-12-23 30 views
4

在解决aspx中的问题时,我从ASP.Net会话变量中设置主干属性时遇到问题。JavaScript上的预期十六进制

我想设置一个属性,其中包含'\ u'中的字符。像

App.prop.set("Username",<%= Session.Name %>) 

Session.Name含有“约翰\ udenver”的价值,当我把在JavaScript调试器,并检查它逃脱了值\ü正确的“约翰\ udenver”

所以Session.Name已经有了“john \ udenver”的转义价值。

但是,当它呈现并试图将值分配给属性时,它正在消除\ u并且我收到一个异常,指出“错误:预期的十六进制数字”。

我尝试使用“越狱”方法

App.prop.set("Username", escape ("<%= Session.Name %>")) 

逃跑,但它抛出同样的异常,它呈现为

App.prop.set("Username", escape ("john\udenver")) 

我想在渲染页面它被更改为“约翰\ udenver “并抛出异常。

其中一种解决方法是在<%= Session.Name%>之前进行RegEx检查。

App.Prop.set("Username","<%= System.Text.RegularExpressions.Regex.Escape(Session.Name)%>"); 

但是,这似乎并不是最清洁的方式。 需要帮助,在字符串中存在\ u或\ x的页面中设置和获取此属性。你可以请建议。

谢谢。

回答

1

那么首先使用\u以外的Unicode转义序列,或者说\x以外的十六进制转义符被规范所禁止,并且会导致一些引擎抛出语法错误。因此,"john\udenver"是JS中的一个非法字符串,因为显然引擎在\u之后正在寻找unicode字符,并且失败将导致语法错误。

UnicodeEscapeSequence :: 
u HexDigit HexDigit HexDigit HexDigitIn 

因此,它不是一个HexDigit,而是找到了丹佛。

所以如果Session.Name值已经"john\udenver"确保用另一个像

App.prop.set("Username",<%= Session.Name.replace(/\\(?=[ux])/g, "\\\\") %>) 
转义反斜线