js实现编码
编码实现方法
JavaScript提供了多种编码方式来处理字符串和URL编码需求。以下是常见的编码方法及其实现方式。
URL编码
使用encodeURIComponent对URL参数进行编码,适用于编码查询字符串部分:
const param = '测试&参数';
const encodedParam = encodeURIComponent(param); // 输出 "%E6%B5%8B%E8%AF%95%26%E5%8F%82%E6%95%B0"
使用encodeURI编码完整URL(保留协议和域名特殊字符):
const url = 'https://example.com/测试路径?name=值';
const encodedUrl = encodeURI(url); // 保留:/?&=等符号
Base64编码解码
通过btoa和atob实现Base64转换(仅支持ASCII字符):
const text = 'Hello World';
const encoded = btoa(text); // "SGVsbG8gV29ybGQ="
const decoded = atob(encoded); // 还原原始字符串
处理Unicode字符需先转换:
function base64EncodeUnicode(str) {
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (_, p1) => String.fromCharCode('0x' + p1)));
}
HTML实体编码
使用textContent自动转义或手动替换:
const div = document.createElement('div');
div.textContent = '<script>alert(1)</script>';
const encodedHtml = div.innerHTML; // "<script>alert(1)</script>"
二进制数据编码
通过TextEncoder处理UTF-8编码:
const encoder = new TextEncoder();
const uint8Array = encoder.encode('你好'); // Uint8Array(6) [228, 189, 160, 229, 165, 189]
十六进制编码
转换为十六进制字符串:

const buffer = new Uint8Array([72, 101, 108, 108, 111]);
const hexString = Array.from(buffer).map(b => b.toString(16).padStart(2, '0')).join(''); // "48656c6c6f"
注意事项
- URL编码时区分
encodeURIComponent(编码所有非字母数字字符)和encodeURI(保留完整URL结构) - Base64编码非ASCII内容需先进行URI组件编码
- 处理二进制数据时注意字节序和编码格式
- 现代浏览器支持
TextEncoder/TextDecoderAPI处理文本编码转换






