我正在努力将一些代码与第三方集成,有时他们传递给我正在编写的Javascript函数的字符串参数将使用encodeURIComponent
进行编码,有时它不会。
是否有明确的方法来检查是否已使用encodeURIComponent
进行编码
如果没有,我会进行编码然后
答案 0 :(得分:6)
您可以解码它并查看字符串是否仍然相同
decodeURIComponent(string) === string
答案 1 :(得分: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)