【问题标题】:What format is this object's key stored in? %00*%00_data该对象的密钥以什么格式存储? %00*%00_数据
【发布时间】:2015-02-18 22:23:28
【问题描述】:

我有一个带有以下键的对象:

*_data

但是,字符以非标准格式编码,导致我的代码出现一些问题。

我将key的值保存到cookie中,发现如下:

%00*%00_data

但是,当将此字符串(使用== 而不是===)与键的值进行比较时,它们并不相等。

目前我将键的值存储到一个变量中,并使用该变量作为键。但是,我非常好奇我可以将实际密钥与哪个字符串进行比较会导致结果为真。

对于这个谜团的任何帮助将不胜感激。

【问题讨论】:

  • 看来key是用encodeURIComponent存储的,所以用decodeURIComponent解码,例如console.log(decodeURIComponent('%00*%00_data')) 显示“*_data”。
  • 太棒了。我使用了if (key == decodeURIComponent('%00*%00_data')),它返回了 true!谢谢!请标记为信用答案。
  • 另外,=== 也返回了 true。
  • 两个值都是字符串,所以无论你使用=== 还是== 都没有区别。
  • 不,从来没有那种感觉……尤里卡? ;-)

标签: javascript text unicode utf-8


【解决方案1】:

%00 是字符 NUL 的 URI 编码 UTF-8 表示,表示空字符。我想这在这里用于区分实际的 * 字符和 * 字符,后者可能会被您正在使用的某个库替换。

我们可以使用JavaScript's decideURIComponent() method%00*%00_data*_data,顾名思义,它会解码URI 编码的字符:

decodeURIComponent("%00*%00_data");

根据您的 cmets,您要比较的 key 变量似乎实际上是 length 8 的字符串。我提到这一点,因为您在问题中包含的字符串 *_datalength 6,因为它不包含两个空字符。

【讨论】:

    猜你喜欢
    • 2018-07-04
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 2019-07-04
    • 2014-06-05
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多