【问题标题】:Expected hexadecimal on javascriptjavascript 上的预期十六进制
【发布时间】:2015-12-23 06:09:49
【问题描述】:

在解决 aspx 中的问题时,我在设置 ASP.Net 会话变量的主干属性时卡住了。

我想设置一个属性,其值包含 '\u' 字符。喜欢

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

Session.Name 包含“john\udenver”作为值,当我将调试器放入 javascript 并检查它已正确转义为 \u 为“john\udenver”的值时

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

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

我尝试使用“escape”方法逃脱

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 的页面中设置和获取此属性。能否请教一下。

谢谢。

【问题讨论】:

    标签: javascript c# asp.net regex backbone.js


    【解决方案1】:

    首先,规范不允许在 Unicode 转义序列之外使用\u,或者在十六进制转义之外使用\x,这会导致某些引擎抛出语法错误。因此,"john\udenver" 在 JS 中是一个非法字符串,因为显然引擎在 \u 之后寻找一个 unicode 字符,失败将导致语法错误。

    UnicodeEscapeSequence ::
    u HexDigit HexDigit HexDigit HexDigitIn
    

    所以它找到了 denver,而不是 HexDigit。

    所以如果Session.Name 的值已经是"john\udenver",请确保使用另一个类似的反斜杠来转义

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-05
      • 2017-05-29
      • 1970-01-01
      • 2023-01-15
      • 1970-01-01
      • 2015-11-11
      • 2016-08-29
      • 1970-01-01
      相关资源
      最近更新 更多