解决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, "\\\\") %>)

10-04 17:16