JS中encodeURIComponent函数用php解码的代码


Posted in PHP onMarch 01, 2012

JS中encodeURIComponent函数给中文编码后,如何用php解码??
前提:编码前的中文可能是gbk,gb2312,utf-8等。

urldecode() 
iconv()

在JS中使用了encodeURIComponent对中文进行编码在PHP中使用iconv('UTF-8','gb2312',$q);就可以得到你需要的字串了,其中gb2312根据你实际应用来定如还不明白为什么看下面的文章

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是在javascript1.5之后引进的,escape则在javascript1.0版本就有。

总结一下用法:

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设置一致

PHP 相关文章推荐
用php写的serv-u的web申请账号的程序
Oct 09 PHP
smarty实例教程
Nov 19 PHP
常用的php对象类型判断
Aug 27 PHP
一个比较简单的PHP 分页分组类
Dec 10 PHP
编写安全 PHP应用程序的七个习惯深入分析
Jun 08 PHP
Smarty foreach控制循环次数的实现详解
Jul 03 PHP
php求正负数数组中连续元素最大值示例
Apr 11 PHP
PHP提交表单失败后如何保留已经填写的信息
Jun 20 PHP
高性能PHP框架Symfony2经典入门教程
Jul 08 PHP
使用图灵api创建微信聊天机器人
Jul 23 PHP
php中的buffer缓冲区用法分析
May 31 PHP
php 多继承的几种常见实现方法示例
Nov 18 PHP
PHP设计模式之装饰者模式
Feb 29 #PHP
php preg_filter执行一个正则表达式搜索和替换
Feb 27 #PHP
mysql总结之explain
Feb 27 #PHP
php&mysql 日期操作小记
Feb 27 #PHP
MySQL时间字段究竟使用INT还是DateTime的说明
Feb 27 #PHP
php explode函数实例代码
Feb 27 #PHP
PHP中获取文件扩展名的N种方法小结
Feb 27 #PHP
You might like
php获取文件夹路径内的图片以及分页显示示例
2014/03/11 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
2015/04/01 PHP
zend framework中使用memcache的方法
2016/03/04 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
动态添加删除表格行的js实现代码
2014/02/28 Javascript
通过实例理解javascript中没有函数重载的概念
2015/06/03 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
2015/11/04 Javascript
浅谈javascript中replace()方法
2015/11/10 Javascript
js css+html实现简单的日历
2016/07/14 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
Vue keepAlive 数据缓存工具实现返回上一个页面浏览的位置
2019/05/10 Javascript
前端使用crypto.js进行加密的函数代码
2020/08/16 Javascript
Python多线程编程(一):threading模块综述
2015/04/05 Python
bpython 功能强大的Python shell
2016/02/16 Python
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
Python实现爬虫抓取与读写、追加到excel文件操作示例
2018/06/27 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
基于python cut和qcut的用法及区别详解
2019/11/22 Python
pytorch实现MNIST手写体识别
2020/02/14 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
python实现人机五子棋
2020/03/25 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
python 实现波浪滤镜特效
2020/12/02 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
C#如何调用Windows程序打开一个文档
2014/12/26 面试题
一个大学生十年的职业规划
2014/01/17 职场文书
小学亲子活动总结
2014/07/01 职场文书
关于上班时间调整的通知
2015/04/23 职场文书