JS encodeURIComponent 编码后在 PHP 中的解码方法

作者:百宝袋

时间:2026-10-26

浏览:496

本文详解 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设置一致


实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章