JS中encodeURIComponent函数用php解码的代码
JS中encodeURIComponent函数给中文编码后,如何用php解码??
前提:编码前的中文可能是gbk,gb2312,utf-8等。
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设置一致
JS中encodeURIComponent函数用php解码的代码的更多相关文章
- js中escape对应的C#解码函数 UrlDecode
js中escape对应的C#解码函数 System.Web.HttpUtility.UrlDecode(s),使用过程中有以下几点需要注意 js中escape对应的C#解码函数 System.We ...
- js中的函数,Date对象,Math对象和数组对象
函数就是完成某个功能的一组语句,js中的函数由关键字 function + 函数名 + 一组参数定义;函数在定义后可以被重复调用,通常将常用的功能写成一个函数,利用函数可以使代码的组织结构更多清晰. ...
- JS中的函数,Array对象,for-in语句,with语句,自定义对象,Prototype
一)函数 A)JS中的函数的定义格式: function add(a,b) { var sum = a+b; document.write("两个数的和是:" + sum); // ...
- js中getByClass()函数
js中getByClass()函数进化史 对于js来说,我想每一个刚接触它的人都应该会抱怨:为什么没有一个通过class来获取元素的方法.尽管现在高版本的浏览器已经支持getElementsByCla ...
- JS中的函数、Bom、DOM及JS事件
本期博主给大家带来JS的函数.Bom.DOM操作,以及JS各种常用的数据类型的相关知识,同时,这也是JavaScript极其重要的部分,博主将详细介绍各种属性的用法和方法. 一.JS中的函数 [函数的 ...
- node.js 中回调函数callback(转载),说的很清楚,看一遍就理解了
最近在看 express,满眼看去,到处是以函数作为参数的回调函数的使用.如果这个概念理解不了,nodejs.express 的代码就会看得一塌糊涂.比如: 复制代码 代码如下: app.use(fu ...
- JS中的函数、BOM和DOM操作
一.JS中的函数 [关于注释] /** [文档注释]:开头两个*.写在函数上方,在调用函数时可以看到文档上方的描述信息. */ // 单行注释 /* 多行注释 */ 1.函数的声明及调用 (1) ...
- html css <input> javaScript .数据类型 JS中的函数编写方式 BOM总结 DOM总结
Day27 html css div 块标签. 特点: 独占一行,有高度和宽度 span 行元素. 特点:在同一行显示,当前行满了自动去下一行显示. 不识别高度和宽度 1.1.1.1 2.输入域标签 ...
- 前端之js中的函数
函数 函数就是重复执行的代码片. 函数定义与执行 <script type="text/javascript"> // 函数定义 function ...
随机推荐
- 深入理解java虚拟机---JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)(十二)
引用:https://www.cnblogs.com/yulei126/p/6777323.html JDK8-废弃永久代(PermGen)迎来元空间(Metaspace) 1.背景 2.为什么废 ...
- Java垃圾回收理解
gc是垃圾回收,Java的垃圾回收分为年轻代回收和老年代回收,其中年轻代回收速度快,频率高,因为Java对象大多具有朝生夕灭的特性,Java对象都是new出来的,当new出很多对象的时候,年轻代很容易 ...
- APC注入(Ring3)
首先简单介绍一下APC队列和Alertable. 看看MSDN上的一段介绍(https://msdn.microsoft.com/en-us/library/ms810047.aspx): The s ...
- HTML5中input[type='date']自定义样式
HTML5提供了日历控件功能,缩减了开发时间,但有时它的样式确实不如人意,我们可以根据下面的代码自行修改. 建议:复制下面的代码段,单独建立一个css文件,方便我们修改. /* 修改日历控件类型 */ ...
- get 和post 请求的写法
get请求 import requests base_url = 'http://httpbin.org' # 定义请求所需的参数,参数之间以英文逗号隔开 param_data = {'} # 发送G ...
- L296 EST 科技英语翻译-美学取向 (上)
tips:对语言进行恰如其分的润饰,讲究词法.句法及篇章的粘连,增加可读性. 1 Accuracy 精确性 科技文章用词要求准确,尽量避免含糊不清和一词多义 dead air静空气 2 Paralle ...
- TensorFlow随机值:tf.random_normal函数
tf.random_normal 函数 random_normal( shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=No ...
- shell脚本实例-while实现批量创建用户
#!/usr/bin/bash while read line #读取一行结果 do if [ ${#line} -eq 0 ];then #如果有空行的话就跳过这次循环 contiune fi us ...
- 用MFC库函数AfxBeginThread()来创建线程
在进行多线程程序设计的时候,我们经常用到AfxBeginThread函数来启动一条线程该函数使用起来非常的简单方便,其定义如下: 1.函数原型 CWinThread* AfxBeginThread( ...
- 记第十四届省赛参赛体会&第十三届
emmm....时间还是很久远了 还是流水账 这次比赛我还是挺开心的 因为感觉我们余神就是一把宝剑,然后我是她的Buff 前面四道题就挺顺利都1A过了,十年余神就是强无敌呀 最后两分钟过了第五题,银牌 ...