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();
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.staus == 200) {
console.log(xhr.responseText);
} 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.请求状态改变事件
// xhr.onreadystatechange=function(){
// if(xhr.readyState==4){
// if(xhr.status==200){
// document.write(xhr.responseText)
// }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 方法
// 返回统一资源标识符(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>
// https://blog.csdn.net/mika85489/article/details/79362256 node后台
//ajx get 转码手动
//post 请求头里 xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
// HTTP Request Header 请求头
// https://baike.baidu.com/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数据
//https://www.jianshu.com/p/6e86903d74f7 请求头内容
// https://blog.csdn.net/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.com
// Host 指定请求的服务器的域名和端口号 Host: www.zcmhi.com
// If - Match 只有请求内容与实体相匹配才有效 If - Match: “737060cd8c284d8af7ad3082f209582d”
// If - Modified - Since 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 If - Modified - Since: Sat, 29 Oct 2010 19: 43: 31 GMT
// If - None - Match 如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变 If - None - Match: “737060cd8c284d8af7ad3082f209582d”
// 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: http://www.zcmhi.com/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.com(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: http://www.zcmhi.com/archives/94.html
// Pragma 包括实现特定的指令,它可应用到响应链上的任何接收方 Pragma: no - cache
// Proxy - Authenticate 它指出认证方案和可应用到代理的该URL上的参数 Proxy - Authenticate: Basic
// refresh 应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持) Refresh: 5; url = http://www.zcmhi.com/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.com(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();
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.staus == 200) {
console.log(xhr.responseText);
} 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>