链接转义encodeURIencodeURIComponentescape三者的区别decodeURI() 函数可对 encodeURI() 函数编码过的 URI 进⾏解码。
decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进⾏解码。
从W3C的定义和⽤法来看,两者没有什么区别,但是两者的参数是有区别的: decodeURIComponent
encodeURI() 函数可把字符串作为 URI 进⾏编码。除了(AZ az 0-9;,/?:@&= + $-_。!〜*’()#)
decodeURI() 来进⾏解密
let url ='tests/encodeURL?name=шеллы';
let encoded =encodeURI(url);
console.log(encoded);// "tests/encodeURL?name=%D1%88%D0%B5%D0%BB%D0%BB%D1%8B"
console.log(decodeURI(encoded))//tests/encodeURL?name=шеллы
encodeURIComponent()可以吧URl进⾏编码 除( A-Z a-z 0-9 - _ . ! ~ * ’ ( ))
decodeURIComponent() 来解密
let url ='ts/encodeURL?name=шеллы';
let encoded =encodeURIComponent(url);
console.log(encoded)//"ts%2FencodeURL%3Fname%3D%D1%88%D0%B5%D0%BB%D0%BB%D1%8B"
console.log(decodeURIComponent(encoded))//ts/encodeURL?name=шеллы
escape() 函数可把字符串作为 URI 进⾏编码。除了( A-Z a-z 0-9@*_±./)
unescape() 来进⾏解密
let url ='ts/encodeURL?name=шеллы';
let encoded =escape(url);
console.log(encoded)//"ts/encodeURL%3Fname%3D%u0448%u0435%u043B%u043B%u044B"
console.log(unescape(encoded))//ts/encodeURL?name=шеллы
注释:ECMAScript v3 反对使⽤该⽅法,应⽤使⽤ decodeURI() 和 decodeURIComponent() 替代它。
地址栏参数分解
function GetQueryString(name){
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if(r!=null)return unescape(r[2]); return null;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Page Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<script>
var xhr =new XMLHttpRequest();
xhr.open('get',encodeURI(url), ture)//加密 get有缓存加时间戳
xhr.send();
adyState ==4){
if(xhr.staus ==200){
console.sponseText);
}else{
}else{
console.log(xhr.status)
}
}
}
// var xhr=null
//try{
// xhr=new XMLHttpRequest();
// }catch(e){
/
/ xhr=new ActiveXObject("Microsoft.XMLHTTP");
// }
// //2.调⽤open⽅法(true----异步)
// xhr.open("post","links/2.post.php",true);
// //3.发送数据
// xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');
//xhr.send("username="+userval+"&age="+ageval+"&timp"+new //Date().getTime());
//4.请求状态改变事件
// adystatechange=function(){
// adyState==4){
// if(xhr.status==200){
/
/ document.sponseText)
// }else{
// alert("错误"+xhr.status)
// }
// }
// }
decodeURI(url)//解码
//路径对加密解密函数
// js对⽂字进⾏编码涉及3个函数:escape, encodeURI, encodeURIComponent,相应3个解码函数:unescape, decodeURI, decodeURIComponent //函数缺点
// escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
/
/ encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
// encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
// unescape ⽅法
// 从⽤ escape ⽅法编码的 String 对象中返回已解码的字符串。
// function unescape(charString: String): String
// 参数
// charString
// 必选。要解码的 String 对象或⽂本。
// 备注
// unescape ⽅法返回⼀个包含 charstring 内容的字符串值。所有以 % xx ⼗六进制形式编码的字符都⽤ ASCII 字符集当中等效的字符代替。以 % uxxxx 格式(Unicode 字符)编码的字符⽤⼗六进制编码
xxxx 的 Unicode 字符代替。注意 unescape ⽅法不应⽤于解码“统⼀资源标识符”(URI) 。请改⽤ decodeURI 和 decodeURIComponent ⽅法。
// decodeURI ⽅法
// 返回⼀个已编码的统⼀资源标识符(URI) 的⾮编码形式。
// function decodeURI(URIstring: String): String
// 参数
// URIstring
// 必选。表⽰编码 URI 的字符串。
// 备注
// 使⽤ decodeURI ⽅法代替已经过时的 unescape ⽅法。
// decodeURI ⽅法返回⼀个字符串值。
// 如果 URIString ⽆效,将发⽣ URIError。
// decodeURIComponent ⽅法
// decodeURIComponent ⽅法
// 返回统⼀资源标识符(URI) 的⼀个已编码组件的⾮编码形式。
// function decodeURIComponent(encodedURIString: String): String
// 必选的 encodedURIString 参数是⼀个表⽰已编码的 URI 组件的值。
// 备注
// URIComponent 是⼀个完整的 URI 的⼀部分
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Page Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<script>
// blog.csdn/mika85489/article/details/79362256 node后台
//ajx get 转码⼿动
/
/post 请求头⾥ xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
// HTTP Request Header 请求头
// baike.baidu/item/http%E8%AF%B7%E6%B1%82%E5%A4%B4/6623287
// 常⽤
// Content-Type: application/x-www-form-urlencoded//普通post请求
// content-type: multipart/form-data//form 表单
// text / xml ⽂本数据
// application / json json数据
//www.jianshu/p/6e86903d74f7 请求头内容
// blog.csdn/wkl305268748/article/details/78577785
// Header 解释⽰例
/
/ Accept 指定客户端能够接收的内容类型 Accept: text / plain, text / html
// Accept - Charset 浏览器可以接受的字符编码集。 Accept - Charset: iso - 8859 - 5
// Accept - Encoding 指定浏览器可以⽀持的web服务器返回内容压缩编码类型。 Accept - Encoding: compress, gzip
// Accept - Language 浏览器可接受的语⾔ Accept - Language: en, zh
// Accept - Ranges 可以请求⽹页实体的⼀个或者多个⼦范围字段 Accept - Ranges: bytes
// Authorization HTTP授权的授权证书 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ ==
// Cache - Control 指定请求和响应遵循的缓存机制 Cache - Control: no - cache
// Connection 表⽰是否需要持久连接。(HTTP 1.1默认进⾏持久连接) Connection: close
// Cookie HTTP请求发送时,会把保存在该请求域名下的所有cookie值⼀起发送给web服务器。 Cookie: $Version = 1; Skin = new;
// Content - Length 请求的内容长度 Content - Length: 348
// Content - Type 请求的与实体对应的MIME信息 Content - Type: application / x - www - form - urlencoded
// Date 请求发送的⽇期和时间 Date: Tue, 15 Nov 2010 08: 12: 31 GMT
// Expect 请求的特定的服务器⾏为 Expect: 100 -continue
// From 发出请求的⽤户的Email From: user@email
// Host 指定请求的服务器的域名和端⼝号 Host: hi
// If - Match 只有请求内容与实体相匹配才有效 If - Match: “737060cd8c284d8af7ad3082f209582d”
// If - Modified - Since 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 If - Modified - Since: Sat, 29 Oct 2010 19: 43: 31 GM T
// If - None - Match 如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag⽐较判断是否改变 If - None - Match: “737060cd8 c284d8af7ad3082f209582d”
// If - Range 如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag If - Range: “737060cd8c284d8af7ad3082f209582d”
// If - Unmodified - Since 只在实体在指定时间之后未被修改才请求成功 If - Unmodified - Since: Sat, 29 Oct 2010 19: 43: 31 GMT
// Max - Forwards 限制信息通过代理和⽹关传送的时间 Max - Forwards: 10
// Pragma ⽤来包含实现特定的指令 Pragma: no - cache
// Proxy - Authorization 连接到代理的授权证书 Proxy - Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ ==
// Range 只请求实体的⼀部分,指定范围 Range: bytes = 500 - 999
// Referer 先前⽹页的地址,当前请求⽹页紧随其后, 即来路 Referer: hi/archives/71.html
// Referer 先前⽹页的地址,当前请求⽹页紧随其后, 即来路 Referer: hi/archives/71.html
// TE 客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息 TE: trailers, deflate; q = 0.5
/
/ Upgrade 向服务器指定某种传输协议以便服务器进⾏转换(如果⽀持) Upgrade: HTTP / 2.0, SHTTP / 1.3, IRC / 6.9, RTA / x11
// User - Agent User - Agent的内容包含发出请求的⽤户信息 User - Agent: Mozilla / 5.0(Linux; X11)
// Via 通知中间⽹关或代理服务器地址,通信协议 Via: 1.0 fred, 1.1 nowhere(Apache / 1.1)
// Warning 关于消息实体的警告信息 Warn: 199 Miscellaneous warning
// HTTP Responses Header 响应头
// Header 解释⽰例
// Accept - Ranges 表明服务器是否⽀持指定范围请求及哪种类型的分段请求 Accept - Ranges: bytes
// Age 从原始服务器到代理缓存形成的估算时间(以秒计,⾮负) Age: 12
// Allow 对某⽹络资源的有效的请求⾏为,不允许则返回405 Allow: GET, HEAD
// Cache - Control 告诉所有的缓存机制是否可以缓存及哪种类型 Cache - Control: no - cache
// Content - Encoding web服务器⽀持的返回内容压缩编码类型。 Content - Encoding: gzip
// Content - Language 响应体的语⾔ Content - Language: en, zh
// Content - Length 响应体的长度 Content - Length: 348
// Content - Location 请求资源可替代的备⽤的另⼀地址 Content - Location: /index.htm
// Content - MD5 返回资源的MD5校验值 Content - MD5: Q2hlY2sgSW50ZWdyaXR5IQ ==
// Content - Range 在整个返回体中本部分的字节位置 Content - Range: bytes 21010 - 47021 / 47022
// Content - Type 返回内容的MIME类型 Content - Type: text / html; charset = utf - 8
// Date 原始服务器消息发出的时间 Date: Tue, 15 Nov 2010 08: 12: 31 GMT
// ETag 请求变量的实体标签的当前值 ETag: “737060cd8c284d8af7ad3082f209582d”
// Expires 响应过期的⽇期和时间 Expires: Thu, 01 Dec 2010 16: 00: 00 GMT
// Last - Modified 请求资源的最后修改时间 Last - Modified: Tue, 15 Nov 2010 12: 45: 26 GMT
/
/ Location ⽤来重定向接收⽅到⾮请求URL的位置来完成请求或标识新的资源 Location: hi/archives/94.html
url编码和utf8区别// Pragma 包括实现特定的指令,它可应⽤到响应链上的任何接收⽅ Pragma: no - cache
// Proxy - Authenticate 它指出认证⽅案和可应⽤到代理的该URL上的参数 Proxy - Authenticate: Basic
// refresh 应⽤于重定向或⼀个新的资源被创造,在5秒之后重定向(由⽹景提出,被⼤部分浏览器⽀持) Refresh: 5; url = hi/archives /94.html
// Retry - After 如果实体暂时不可取,通知客户端在指定时间之后再次尝试 Retry - After: 120
// Server web服务器软件名称 Server: Apache / 1.3.27(Unix)(Red - Hat / Linux)
// Set - Cookie 设置Http Cookie Set - Cookie: UserID = JohnDoe; Max - Age=3600; Version = 1
// Trailer 指出头域在分块传输编码的尾部存在 Trailer: Max - Forwards
// Transfer - Encoding ⽂件传输编码 Transfer - Encoding: chunked
// Vary 告诉下游代理是使⽤缓存响应还是从原始服务器请求 Vary: *
// Via 告知代理客户端响应是通过哪⾥发送的 Via: 1.0 fred, 1.1 nowhere(Apache / 1.1)
// Warning 警告实体可能存在的问题 Warning: 199 Miscellaneous warning
// WWW - Authenticate 表明客户端请求实体应该使⽤的授权⽅案 WWW - Authenticate: Basic
var xhr =new XMLHttpRequest();
xhr.open('get',encodeURI(url), ture)//加密 get有缓存加时间戳
xhr.send();
adyState ==4){
if(xhr.staus ==200){
console.sponseText);
}else{
console.log(xhr.status)
}
}
}
//URLDecoder.decode("chinese string","UTF-8") 后台测试
decodeURI(url)//解码
// 必需。⼀个字符串,含有要解码的 URI 或其他要解码的⽂本。
// ⽐如客户端把unicode码通过utf - 8转换为⼆进制流(也就是字节byte),⽽到了服务器端⽤gbk编码来把这个⼆进制流转换为字符串(unicode)的时候,就会出现乱码。必须也要⽤相应的编码⽅式进⾏转换。
// gbk(encode) gbk(decode)
// unicode----------------> byte[]------------------------------> unicode
// String ⼆进制流 String
</script>
</body>
</html>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论