解决aspx中的问题时,我在从ASP.Net session 变量设置主干属性时遇到了麻烦。
我想设置一个属性,其值之间包含'\ u'。喜欢
App.prop.set("Username",<%= Session.Name %>)
Session.Name包含“john \ udenver”作为值,当我将调试器放入javascript中并检查该值时,它已正确地转义\ u为“john \ udenver”
因此,Session.Name已经具有转义的“john \ udenver”值。
但是,当它呈现并尝试将值分配给属性时,它将转义\ u,并且出现异常,提示“错误:期望的十六进制数字”。
我尝试使用“转义”方法进行转义
App.prop.set("Username", escape ("<%= Session.Name %>"))
但它抛出相同的异常,它呈现为
App.prop.set("Username", escape ("john\udenver"))
我认为渲染页面时将其更改为“john \ udenver”并引发异常。
解决方法之一是将RegEx检查放在之前。
App.Prop.set("Username","<%= System.Text.RegularExpressions.Regex.Escape(Session.Name)%>");
但这似乎并不是最干净的方法。
需要帮助来设置和获取字符串中包含\ u或\ x的页面中的此属性。你能建议一下吗?
谢谢。
最佳答案
首先,规范不允许在Unicode转义序列之外使用\u
,或者在十六进制转义之外使用\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, "\\\\") %>)