一般来说,URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号。
比如,世界上有英文字母的网址"http://www.abc.com",
但是没有希腊字母的网址"http://www.aβγ.com"(读作阿尔法-贝塔-伽玛.com)。
这意味着,如果URL中有汉字,就必须编码后使用。
但是麻烦的是,RFC 1738没有规定具体的编码方法,
而是交给应用程序(浏览器)自己决定。这导致"URL编码"成为了一个混乱的领域。

1、URL编码问题

如任何查看windows系统的编码
进入cmd,输入chcp命令

可以得到活动代码936就标示当前编码是:中国-简体中文(GB2312)

url编码中的情况

例如在postman中输入网址"http://www.tongzhuo100.com/manager/solo/api/common/encode.php?name=%5c&age=a&user=%BA%FA%23"
一、网址路径中包含汉字

输入网址"http://zh.wikipedia.org/wiki/春节"
所以,结论就是,网址路劲的编码,用的是utf-8编码

二、查询字符串中包含汉子
http://www.baidu.com/s?wd=春节

所以,结论就是,查询字符串的编码,用的是操作系统的默认编码。

三、GET或者POST方法生成的URL包含汉子

例如在form表单中,get或者post请求

get和post方法的编码,用的是网页的编码。

四、ajax调用的url包含汉子

五、JavaScript函数:escape()

JavaScript语言用于编码的函数,一共有三个,最古老的一个就是escape()。虽然这个函数
现在已经不提倡使用了,但是由于历史原因,
很多地方还在使用它,所以有必要先从它讲起。

实际上,escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。
比如"春节"的返回结果是%u6625%u8282,也就是说在Unicode字符集中,"春"是第6625个(十六进制)字符,
"节"是第8282个(十六进制)字符。

javascript:escape('春节');
"%u6625%u8282"

它的具体规则是,除了ASCII字母、数字、标点符号"@ * _ + - . /"以外,对其他所有字符进行编码。
在\u0000到\u00ff之间的符号被转成%xx的形式,其余符号被转成%uxxxx的形式。对应的解码函数是unescape()。

所以,”Hello world“的escape编码就是”hello%20world“。因为空格的Unicode的值是20(十六进制)。

首先,无论网页的原始编码是什么,一旦被JavaScript编码,就都变成为Unicod字符。(注意是十六进制的),
JavaScript函数的输入和输出,默认都是Unicode字符,这一点对下面两个函数也适用。

六、JavaScript函数:encodeURI()
encodeURI是JavaScript中真正用来对URL编码的函数。
它着眼于对整个URL进行编码,因此除了常见的符号以外,
对其他一些在网址中有特殊含义的符号"; / ? : @ & = + $ , #",也不进行编码。
编码后,它输出符号的utf-8形式,并且在每个字节前加上%。

它对应的解码函数是decodeURI()。
需要注意的是,它不对单引号'编码。
七、Javascript函数:encodeURIComponent()
最后一个Javascript编码函数是encodeURIComponent()。
与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。
因此,"; / ? : @ & = + $ , #",这些在encodeURI()中不被编码的符号,
在encodeURIComponent()中统统会被编码。至于具体的编码方法,两者是一样。

它对应的解码函数是decodeURIComponent()。

URL编码问题的更多相关文章

  1. url 编码(percentcode 百分号编码)(转载)

    原文地址:http://www.cnblogs.com/leaven/archive/2012/07/12/2588746.html   http://www.imkevinyang.com/2009 ...

  2. 【原】聊一聊 url 编码问题

    最近项目中遇到需要编码的一个问题,在encode和encodeURIComponent上绕了个小圈,所以打算总结一下js的编码问题,网上也有很多类似的文章,不过呢,总结出来的东西才是自己滴 为什么需要 ...

  3. Owin的URL编码怎么搞?以前都是HttpUtility.UrlEncode之类的,现在连system.web都没了,肿么办?

    Owin的URL编码怎么搞?以前都是HttpUtility.UrlEncode之类的,现在连system.web都没了,肿么办? 编码: Uri.EscapeDataString(name) 解码: ...

  4. 【基础进阶】URL详解与URL编码

    作为前端,每日与 URL 打交道是必不可少的.但是也许每天只是单纯的用,对其只是一知半解,随着工作的展开,我发现在日常抓包调试,接口调用,浏览器兼容等许多方面,不深入去理解URL与URL编码则会踩到很 ...

  5. 【阮一峰】深入研究URL编码问题及JavaScript相应的解决方案

    作者: 阮一峰 日期: 2010年2月11日 一.问题的由来 URL就是网址,只要上网,就一定会用到. 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上 ...

  6. delphi URL 编码的转换

    先介绍一下,Delphi中处理Google的URL编码解码,其中就会明白URL编码转换的方法的 从delphi的角度看Google(谷歌)URL编码解码方式 在网上搜索了一下,似乎没有什么关于goog ...

  7. sed处理url编码解码=== web日志的url处理

    URL 编码/解码方法(linux  shell实现),方法如下: 1.编码的两种方法: admin@~ 11:14:29>echo '手机' | tr -d '\n' | xxd -plain ...

  8. url编码

    url编码 情况1:网址路径中包含汉字 打开IE,输入网址”http://zh.wikipedia.org/wiki/春节”.注意,”春节”这两个字此时是网址路径的一部分. 查看HTTP请求的头信息, ...

  9. URL编码和解码工具

    开发中发现需要进行URL的编解码,每次百度出来的还带广告而且比较慢,写了一个本地的工具,比较简单,希望对大家有帮助. <!DOCTYPE html PUBLIC "-//W3C//DT ...

  10. URL编码 utf-8 gb2312的区别

    一.问题的由来 URL就是网址,只要上网,就一定会用到. 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上有英文字母的网址“http://www.abc ...

随机推荐

  1. Docker基于已有的镜像制新的镜像-Docker for Web Developers(3)

    1.根据运行的容器制作镜像 #查看所有的容器 docker ps #暂停当前容器 docker pause COTNAINER-ID #将容器运行当前状态提交 docker commit COTNAI ...

  2. ADO.NET 数据库备份等操作

    public class SqlServerBackup { private string database; private string server; private string uid; p ...

  3. 安装Node和NPM

      1.node和NPM是什么?   Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js ...

  4. android开发(47) 使用xml drawable 实现 局部圆角,可用作圆角边框

    代码如下: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android=" ...

  5. Opencv Mat运算(转)

    一.矩阵Mat I,img,I1,I2,dst,A,B; double k,alpha; Scalar s; //注意Mat的行列号是从0开始的 //定义矩阵a,b,c Mat a,b,c; //生成 ...

  6. HttpWebRequest - Asynchronous Programming Model/Task.Factory.FromAsyc

    Posted by Shiv Kumar on 23rd February, 2011 The Asynchronous Programming Model (or APM) has been aro ...

  7. ICMP timestamp 请求响应漏洞

    ICMP timestamp请求响应漏洞   解决方案: * 在您的防火墙上过滤外来的ICMP timestamp(类型13)报文以及外出的ICMP timestamp回复报文.   google之, ...

  8. Oracle Grid 11.2.0.4 安装是出现“[INS-41112] Specified network interface doesnt maintain connectivity across cluster”错误

    最新文章:Virson's Blog 安装Oracle 11.2.0.4 的RAC,在Grid 安装时报错: [INS-41112]Specified network interface doesnt ...

  9. (原)android系统下绑定Server的时候报MainActivity has leaked ServiceConnection的错误

    今天在android系统下根据官方的demo代码,我们需要启动一个服务,并绑定,但在程序启动以后,老是报错:   Activity MainActivity has leaked ServiceCon ...

  10. Java虚拟机(二):Java GC算法 垃圾收集器

    概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本地方 ...