如何为URI编码字符串,例如Capitan's Hat -> Capitan%27s+Hat
或Сhristmas Hat -> %D0%A1hristmas+Hat
我试过,几种方法encodeURIComponent(), encodeURI()
,但没有带来足够接近我需要的。知道它是怎么被编码的吗?
Escape()对于队长帽的结果比较接近,但是对于圣诞帽的结果就完全不一样了。
编辑:
正如Thomas所说,encodeuriccomponent完成了这项工作,但是如何实现替换编码字符,回到字符?例如Сhristmas Hat -> "%D0%A1hristmas+Night"
我知道replace(),针对每个字符将工作,但是否有更普遍的选择?
const encode = str => new URLSearchParams([['', str]]).toString().slice(1)
const decode = str => new URLSearchParams('=' + str).get('')
console.log(encode('Сhristmas Hat'))
console.log(decode('%D0%A1hristmas+Hat'))
说明:URLSearchParams
构造函数可以接受键/值对数组([['key', 'value']]
)或查询字符串('key=value'
)。在URLSearchParams
实例上调用get
将获取该键的未编码值;同时,调用toString
给出url编码的键/值对的完整字符串。在本例中,我们使用空字符串''
作为键,因为键并不重要。
URL编码查询参数的算法与encodeURIComponent
相似,但也将空格替换为+
。