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邮件专题
Oct 09 PHP
php代码把全角数字转为半角数字
Dec 10 PHP
php 解决旧系统 查出所有数据分页的类
Aug 27 PHP
php教程之魔术方法的使用示例(php魔术函数)
Feb 12 PHP
thinkphp实现数组分页示例
Apr 13 PHP
php操作xml入门之xml标签的属性分析
Jan 23 PHP
php实现数组按指定KEY排序的方法
Mar 30 PHP
PHP附件下载中文名称乱码的解决方法
Dec 17 PHP
php阳历转农历优化版
Aug 08 PHP
php版微信公众平台实现预约提交后发送email的方法
Sep 26 PHP
Laravel框架使用Seeder实现自动填充数据功能
Jun 13 PHP
laravel 事件/监听器实例代码
Apr 12 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
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
php递归函数怎么用才有效
2018/02/24 PHP
javascript读取RSS数据
2007/01/20 Javascript
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
js页面滚动时层智能浮动定位实现(jQuery/MooTools)
2011/08/23 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
前端 Vue.js 和 MVVM 详细介绍
2016/12/29 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
微信小程序实现聊天对话(文本、图片)功能
2018/07/06 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
2019/09/16 Javascript
使用layui的layer组件做弹出层的例子
2019/09/27 Javascript
vue 返回上一页,页面样式错乱的解决
2019/11/14 Javascript
[10:42]Team Liquid Vs Newbee
2018/06/07 DOTA
详细探究Python中的字典容器
2015/04/14 Python
Python网络编程中urllib2模块的用法总结
2016/07/12 Python
利用Python为iOS10生成图标和截屏
2016/09/24 Python
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
python 识别图片中的文字信息方法
2018/05/10 Python
TensorFlow实现Logistic回归
2018/09/07 Python
纯python进行矩阵的相乘运算的方法示例
2019/07/17 Python
详解Python打包分发工具setuptools
2019/08/05 Python
安装Pycharm2019以及配置anconda教程的方法步骤
2019/11/11 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
python文件排序的方法总结
2020/09/13 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
ECCO爱步官方旗舰店:丹麦鞋履品牌
2018/01/02 全球购物
便携式太阳能系统的创新者:GOAL ZERO
2018/02/04 全球购物
Java的类可以定义为Protected或者Private得吗
2015/09/25 面试题
安全承诺书范文
2014/03/26 职场文书
田径运动会开幕式及主持词
2014/03/28 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL