JS encodeURIComponent 编码后在 PHP 中的解码方法
本文详解 JavaScript 中 encodeURIComponent 对中文编码后的 PHP 解码方案。针对 GBK、UTF-8 等不同源编码,介绍使用 iconv 进行字符集转换的方法,并对比 escape、encodeURI 等函数的编码差异,提供 Servlet/JSP 环境下的完整编码解码配置建议。
JS encodeURIComponent 编码后在 PHP 中的解码方法
在 JavaScript 中使用 encodeURIComponent 函数对中文进行编码后,如何在 PHP 中进行正确解码?
需要注意的是,编码前的原始中文数据可能采用 GBK、GB2312 或 UTF-8 等多种编码格式。
相关代码实现如下:
urldecode()
iconv() 当在 JavaScript 中使用 encodeURIComponent 对中文进行编码时,在 PHP 端可以通过 iconv('UTF-8', 'gb2312', $q) 函数获取原始字符串。其中,目标编码格式(如 gb2312)需根据实际应用需求进行调整。若需深入理解其原理,可参考后续关于 URL 编码函数的详细说明。
URL 编码转换:escape()、encodeURI() 与 encodeURIComponent()
URL 编码转换:escape()、encodeURI() 与 encodeURIComponent()
本文旨在介绍 URL 编码中常用的三个函数:escape()、encodeURI() 以及 encodeURIComponent()。
escape() 方法:
采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。unescape方法与此相反。不会被此方法编码的字符: @ * / +
encodeURI() 方法:
该方法将 URI 字符串采用 UTF-8 编码格式转化为 escape 格式的字符串。以下字符不会被编码:!、@、#、$、&、*、(、)、=、:、/、;、?、+、'。
encodeURIComponent() 方法:
该方法同样将 URI 字符串采用 UTF-8 编码格式转化为 escape 格式的字符串。与 encodeURI() 相比,它会对更多字符进行编码,例如 / 等字符。因此,如果字符串中包含 URI 的多个部分,不应使用此方法进行编码,否则 / 字符被编码后会导致 URL 显示错误。不会被此方法编码的字符包括:!、*、(、)。
因此,对于中文字符串,如果希望保持原有编码格式而非转换为 UTF-8(例如当原页面与目标页面的 charset 一致时),只需使用 escape 方法。若页面采用 GB2312 或其他编码,而接收参数的页面为 UTF-8 编码,则应采用 encodeURI 或 encodeURIComponent 方法。
注意:escape 方法不应用于对“统一资源标识符”(URI) 进行编码,对此应使用 encodeURI 和 encodeURIComponent 方法。此外,encodeURI/encodeURIComponent 是在 JavaScript 1.5 之后引入的,而 escape 方法在 JavaScript 1.0 版本中就已存在。
总结一下用法:
HTTP 请求与 Servlet/JSP 编码配置总结
1、HTTP POST 方式在默认情况下,采用“x-www-form-urlencoded”进行编码,其作用与 JavaScript 中的 encodeURI 相同;
2、经过上述编码的内容,到达后台时,其中的字符均为 UTF-8 编码格式;
3、如果你的 Servlet/JSP 指定输出使用的 Content-Type 为 UTF-8,则无需对这些 Parameters 进行特别的编码或解码操作,它们将正常显示;
4、否则,你需要对这些 parameter 进行解、编码操作。例如,若你的页面采用 GBK 编码,则需按以下方式处理:
String sPara = new String(request.getParamter("test").getBytes("iso-8859-1"),"GBK");
采用 gb2312 编码的情况也可采用 GBK 编码处理;
5、如果你在 Eclipse 中进行开发,请注意你的 Servlet 和 JSP 文件的属性,其中的编码必须与 Content-Type 中设置的一致。否则,javac 会对你的文件进行错误的编码,导致字节码文件中的字符串本身错误,此时即使输出也无法解决问题;
6、最后做一个总结:
6.1、Servlet/JSP 文件本身的编码必须与 Content-Type 输出的一致,否则需要加入额外的编码、解码步骤;
6.2、HTTP POST 方式和 encodeURI 方式传入的编码均为 UTF-8;
6.3、普通的 window.open(...),即 HTTP GET 方式,其传入的编码与运行 script 的页面编码一致;
6.4、后台解码必须通过 iso-8859-1 进行解码,再使用你的目标编码进行编码;
6.5、 response.setContentType("text/xml;charset=utf-8");
如有汉字回显至页面,须加 charset=utf-8 字样
request.setCharacterEncoding("UTF-8");//页面如通过 POST 过来,含有汉字,须加这一句
此语句放在程序最前面;
6.6 请保证项目属性编码为"UTF-8",请求页面与响应页面编码一致(可以是后台)UTF-8.必须保证文件
属性和ContentType设置一致
JS中parseInt与Number转整数的核心区别及适用场景
2026-11-05 17:35:53
定制 Quill.js 主题样式:修改默认 CSS 与添加自定义类名
2026-11-04 11:21:35
混淆JS代码怎么在线反混淆并格式化阅读
2026-11-03 21:46:39
JS在线编辑器代码报错怎么调试?控制台使用技巧
2026-11-03 21:24:56
从 marked.js 旧版本升级到最新版:API 变更与迁移指南
2026-11-03 17:38:17
