我想将字符串转换为带有javascript的十六进制符号。
所以,如果我有一个字符串:
转化结果为:
的http%3A%2F%2Fwww%2Emydomain%2Ecom
注意%而不是0x
答案 0 :(得分:0)
您可以使用正则表达式:
var url = 'http://example.com';
var escaped = url.replace(/[^A-Za-z0-9]/g, function(match) {
var hex = match.charCodeAt(0).toString(16);
return '%' + (hex.length < 2 ? '0' + hex : hex);
});
console.log(escaped); // => "http%3a%2f%2fexample%2ecom"
[^A-Za-z0-9]
表示“任何不是字母或数字的东西”(^
表示不是放在字符类的开头)。
将函数传递给replace
时,它会调用该函数(以匹配作为参数),而不是用静态字符串替换。
charCodeAt
将获取指定字符的字符代码(通过参数),因此charCodeAt(0)
将获取第一个字符的字符代码。
toString
接受一个选项基本参数,指定您想要的基数,而基数16是十六进制。
最后,(hex.length < 2 ? '0' + hex : hex)
将添加一个前导零,以防生成的十六进制只有一位数。