获取相册所有uri_URI转码
一、 encodeURI来解决URL传递时的中文问题
1.前端:
var url = baseContext+"xxxx.action?parm="+encodeURI(encodeURI('中'));
2.后端:
String supName = request.getParameter("parm");
supName = URLDecoder.decode(supName, "UTF-8");
二、特殊字符在传输过程中被转义编码( %+ASCII(16进制)码值 )
有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。例如 空格的编码值是"%20"。
如果不使用转义字符,这些编码就会当URL中定义的特殊字符处理。
开发时有时服务端返回的json中包含url,url中可能含有一些特殊字符,这些特殊字符在传输的过程中可能会被转义成编码。这时候我们拿到手里要如何转换回去呢,先看下那些字符可能会被编码
三、
做页面开发的时候有时候,会使用Javascript的escape(),encodeURIComponent(),encodeURI ()这三个函数进行URL编码,防止特殊字符接收不到。
1.使用encodeURLComponent传递参数
function URLencode(sStr) {sStr = escape(escape(sStr));location.href="http://passport.baidu.com/?logout&aid=7&u='+encodeURIComponent("http://cang.baidu.com/bruce42")+);}
2. 进行URL跳转的时候整体使用encodeURL
function URLencode(sStr) {Location.href=encodeURI("http://cang.baidu.com/do/s?word=京东&ct=21"); }
3.js使用数据时可以用escape(个人用的比较多)编码功能比较强大
Javascript中的escape()是将中文按ISO-8859-1字符集进行URL编码的,那样通过 request.getParameter()是能直接获取到请求参数的,但后来的Javascript将escape()换成了Unicode字符集编 码,如此一来,在JSP和Servlet中就没法直接拿到请求参数了,而且此时的request获得的参数值都是空值,
四、
总结:URL编码转换函数:
escape() 不常用
encodeURI() 对整体URL编码 常用 不编码! @ # $ & ( ) = : / ; ? + 等符号
encodeURIComponent() 这种串不建议使用此编码http://www.oschina.net/search?scope=bbs
- escape() : 采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都会转化成%xx格式的字符编码(xx代表此字符在字符集表里编码的16进制数字)。比如,空格符的对应编码是%20。不会对ASCII字符和数字进行编码。不会被此方法编码的字符:@ * / +,反向编码函数:unescape()。
2. encodeURI(): 把URI字符串采用UTF-8编码格式转化成escape格式的字符串。不会被此方法编码的字符:! @ # $ & ( ) = : / ; ? + ',反向编码函数:decodeURI()。
var str1 = encodeURI('http://www.oschina.net/search?scope=bbs&q=C语言')
str1
//"http://www.oschina.net/search?scope=bbs&q=C%E8%AF%AD%E8%A8%80"
decodeURI(str1)
//"http://www.oschina.net/search?scope=bbs&q=C语言"
3. encodeURIComponent():把URI字符串采用URF-8编码格式转化成escape格式的字符串。与encodeURI相比,这个函数会将更多的字符进行编码,比如"/"等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个来进行编码。否则“/”字符被编码后将URL显示错误。不会被此方法编码的字符:! * ( ),反向编码函数:decodeURIComponent()。
encodeURIComponent('1@2')
"1%402"
decodeURIComponent("1%402")
"1@2"
.
TIPS: 浏览器不会自动转码
- PC浏览器,不会动URL中的参数、 cookie、 以及项目中显示的字符串,进行任何的自动转码。
- 有可能 我们的项目是UTF-8的,但是用户的浏览器编码设置 是其他的编码方式。可能会自动转码,待测试。
3. 多次编码,多次转码 涉及到用户名时
decodeURIComponent(decodeURIComponent(decodeURIComponent('jinyifan%252020321')))
"jinyifan 20321"
decodeURIComponent(decodeURIComponent('jinyifan%252020321'))
"jinyifan 20321"
decodeURIComponent('jinyifan%252020321')
"jinyifan%2020321"
解码多次一个不带%25(这是 %号的编码)的串时,多次解码结果是一样的。
decodeURIComponent('jinyifan%20321')
"jinyifan 321"
decodeURIComponent(decodeURIComponent('jinyifan%20321'))
"jinyifan 321"
decodeURIComponent(decodeURIComponent(decodeURIComponent('jinyifan%20321')))
"jinyifan 321"
编码多次一个带空格的串 是会产生大量的%25的
encodeURIComponent('jinyifan 321')
"jinyifan%20321"
encodeURIComponent(encodeURIComponent('jinyifan 321') )
"jinyifan%2520321"
encodeURIComponent(encodeURIComponent(encodeURIComponent('jinyifan 321') ))
"jinyifan%252520321"
encodeURIComponent(encodeURIComponent(encodeURIComponent(encodeURIComponent('jinyifan 321') )))
"jinyifan%25252520321"
前端给后端传用户名串时,编码几次合理?
注意:
- 鉴于以上存在的问题,在服务端解码过程中,需要谨慎考虑各种场景下(包括前端、领域)的编解码方式、次数(夹杂BASE64编码)等因素进行解码。
var id="aVUAAAACS+uJkta7";encodeURIComponent(id)
"aVUAAAACS%2BuJkta7"encodeURIComponent(encodeURIComponent(id));
"aVUAAAACS%252BuJkta7"
在前端与后端传递数据时,会遇到这样一个问题,如果传递的字符串中含有特殊字符
如:+ 空格/ ? % & = #
如果不进行特殊处理,会发生数据丢失的现象。
例如:我在前端传入后端"aVUAAAACS+uJkta7" 但是后端接收的时候接收到的是
"aVUAAAACS uJkta7" ,特殊字符“+”丢失了。
解决的办法就是:
前端在传递之前,检查一下是否有特殊字符,如果有,进行一下转换编码操作。
例如:前端部分
var id="aVUAAAACS+uJkta7";
id = encodeURIComponent(encodeURIComponent(id));
后端在接收字符串时,检查是否有编码的形式,如果有,进行解码。这样就完成了特殊字符的传递。
后端部分:
String id = pd.getString("id");//获取id
id = java.net.URLDecoder.decode(id,"UTF-8");//特殊字符解码
这样id就成功完整地由前端传入后端了。
——————————————————————————————————————
decodeURI与decodeURIComponent区别
1. 概念:
URI: Uniform ResourceIdentifiers,通用资源标识符
Global对象的encodeURI()和encodeURIComponent()方法可以对URI进行编码,以便发送给浏览器。有效的URI中不能包含某些字符,例如空格。而这URI编码方法就可以对URI进行编码,它们用特殊的UTF-8编码替换所有无效的字 符,从而让浏览器能够接受和理解。
其中encodeURI()主要用于整个URI(例如,http://www.jxbh.cn/illegal value.htm),而encode-URIComponent()主要用于对URI中的某一段(例如前面URI中的illegal value.htm)进行编码。它们的主要区别在于,encodeURI()不会对本身属于URI的特殊字符进行编码,例如冒号、正斜杠、问号和井字号;而encodeURIComponent()则会对它发现的任何非标准字符进行编码。来看下面的例子:
var uri="http://www.jxbh.cn/illegal value.htm#start";
//”http: //http://www.jxbh.cn/illegal%20value .htm#s tart”
alert(encodeURI (uri)):
//”http% 3A%2F%2Fwww.jxbh.cn%2 Fillegal%2 0value. htm%23 start”
alert( encodaURIComponent (uri));
使用encodeURI()编码后的结果是除了空格之外的其他字符都原封不动,只有空格被替换成了%20。而encodeURIComponent()方法则会使用对应的编码替换所有非字母数字字符。这也正是可以对整个URI使用encodeURI(),而只能对附加在现有URI后面的字符串使用encodeURIComponent()的原因所在。一般来说,我们使用encodeURIComponent()方法的时候要比使用encodeURI()更多,因为在实践中更常见的是对查询字符串参数而不是对基础URL进行编码.
经我的观测,很多网站的cookie在进行编码的时候,是encodeURIComponent格式的,所以应该使用decodeURIComponent()进行解码
获取相册所有uri_URI转码相关推荐
- CIDetector 相册识别二维码出错
在做点击相册识别二维码识别不了,折腾了大半天,终于从坑里爬出来 ,下面分享一下填坑过程 在创建相册和获取图片的时候添加上面的代码.然后用取出来的图片作为参数进行二维码识别,下面封装了一个类方法: pu ...
- Zxing图片识别 从相册选二维码图片解析总结
Zxing图片识别 从相册选取二维码图片进行解析总结 在Zxing扫描识别和图片识别的解析对象是相同的 本文分三个步骤: 1 获取相册的照片 2 解析二维码图片 3 返回结果 1) 获取相册照片 go ...
- Android二维码多码识别,相册选择二维码,自定义扫码界面
现在很多App都有扫码识别二维码的场景,最新的扫码已经支持全屏扫码.从相册选取二维码识别,以下使用基于Zxing封装的一个库:https://github.com/maning0303/MNZXing ...
- 相册权限_苹果手机惊现漏洞?App在未获取相册权限的情况下成功读取照片
近日,知乎上网友爆料发现苹果手机存在漏洞,一款名叫"时间规划局"的App可在未获取相册权限的情况下读取照片.专家猜测可能是App调用了苹果的私有库,绕过了系统的授权机制. 2月26 ...
- 【Groovy】MOP 元对象协议与元编程 ( Groovy 类内部和外部分别获取 metaClass | 分析获取 metaClass 操作的字节码 | HandleMetaClass 注入方法 )
文章目录 一.Groovy 类内部和外部分别获取 metaClass 二.分析 Groovy 类内部和外部获取 metaClass 操作的字节码 三.使用 HandleMetaClass 注入方法 一 ...
- Android获取相册中图片的路径 4.4版本前后的变化
两个问题: 1. 通过调用系统Action,从图库中选择图片,并展示到界面上 2. API19前后获取相册图片路径 详见(仅客户端代码),请移步:本人GITHUB Intent intent = ne ...
- 获取android设备唯一编号_android 获取手机设备的唯一码(IMIE )
获取手机设备的唯一码(IMIE ) public void fetch_status(){ TelephonyManager tm = (TelephonyManager) this .getSyst ...
- ALAssetsLibrary获取相册列表
之前一篇博客,说了下通过ALAssetsLibrary获取全部图片的方法,这里再说说获取相册列表的方法. 代码如下: -(void)test { ALAssetsLibrary* theLibrary ...
- android获取设备的唯一编号,android如何获取设备的唯一设备码
在某些项目中,需要记录用户的某些设置,或行为,并上传到服务器,如果无需用户登录注册,就可记录独立这些内容,就需要用到设备的某些独立的序列.(以下部分android需要API8以以上,android2. ...
最新文章
- Marshal.ReleaseComObject
- 中小型互联网企业安全建设漫谈。
- 代码实现【mini版】——给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?
- 循环链表解决约瑟夫问题(简化版)
- C# 设置当前程序调用的dll文件以及其他文件的寻址路径
- Tail Recursion尾递归
- AS3.0中的显示编程(末篇)-- 滤镜(下)
- python实现批量图片/文件重命名
- ARP欺骗报文是这个样子的
- Pytorch——DataLoader(批训练)
- [转]PostgreSQL源码结构
- cache 的设计与实现
- 【图像去噪】基于matlab BM3D算法图像去噪【含Matlab源码 1779期】
- (已成功)windows下,VS2012+Qt5.5.1的安装、路径配置、项目配置(其它版本可参考)
- java activiti 工作流引擎_Activiti工作流引擎简介详解
- Mac改变系统截图存储路径
- 【服务器数据恢复】StorNext文件系统数据恢复案例
- 提升网页加载速度 | google网站速度测试
- 魔兽服务器修改端口,求魔兽世界某服务器IP地址和端口
- java 矩阵求逆_详解用java描述矩阵求逆的算法
热门文章
- 小猪笔记本电脑装linux时需要以下命令
- 白炽灯可控硅调光程序
- 二维vector的声明和初始化
- 考研数学一历年真题小题(选择填空)整理
- python中如果要多次输入文本,关于文本游戏:文本游戏 – 如果语句基于输入文本 – Python...
- 如何选购晨检机器人_扫地机器人好不好用?如何选购?答案在这
- python程序语法元素分析_Python程序语法元素分析(2)
- r语言的MASS包干什么的_怎么记住r语言这么多包?
- matlab全景图像拼接_带你认识网络高清全景监控摄像机
- outlook邮箱显示一直启动中_Outlook 2016 无法正常启动,显示“正在处理” 然而处理了好几天也没有处理完...