6

我正在努力将一些代码与第三方集成,有时他们传递给我正在编写的 Javascript 函数的字符串参数将使用 进行编码encodeURIComponent,有时则不会。

是否有确定的方法来检查它是否已使用encodeURIComponent
如果没有,我将进行编码然后

4

2 回答 2

7

您可以对其进行解码并查看字符串是否仍然相同

decodeURIComponent(string) === string
于 2013-10-29T05:47:26.653 回答
2

不可靠,尤其是在字符串可能被编码两次的情况下:

encodeURIComponent('http://stackoverflow.com/')
// yields 'http%3A%2F%2Fstackoverflow.com%2F'

encodeURIComponent(encodeURIComponent('http://stackoverflow.com/'))
// yields 'http%253A%252F%252Fstackoverflow.com%252F'

从本质上讲,如果您在传递的参数实际上没有编码但具有编码字符串的质量时尝试检测字符串编码,那么您将解码一些您不应该解码的东西。

我建议在定义“isURIComponent”中添加第二个参数。


但是,如果您想尝试,也许以下方法可以解决问题:

if ( str.match(/[_\.!~*'()-]/) && str.match(/%[0-9a-f]{2}/i) ) {
    // probably encoded with encodeURIComponent
}

这将测试未编码的非字母数字字符是否完整,以及是否存在十六进制(例如 %20 表示空格)

于 2013-10-29T05:40:11.863 回答