-
如何对url进行编码
- 时间:2024-11-06 03:19:43
大家好,今天Win10系统之家小编给大家分享「如何对url进行编码」的知识,如果能碰巧解决你现在面临的问题,记得收藏本站或分享给你的好友们哟~,现在开始吧!
1.url如何编码解码?为什么要编码?
一般来说,网址只能使用英文字母、阿拉伯数字和一些标点符号,不能使用其他文字和符号,因为网络标准RFC。
1738年制定了一个硬性规定。如果网址中有汉字,就必须编码使用。但问题是,RFC
738中没有规定具体的编码方式,而是由应用程序(浏览器)自行决定,导致了URL编码’的混乱。
导致混乱的四种情况:
该URL包含中文字符。
查询字符串包含中文字符。
Get方法生成的URL包含中文字符。
Ajax调用的URL包含汉字(在Ajax调用中,IE始终采用GB2312编码(操作系统默认编码),而Firefox始终采用utf-8编码)。)
综上所述,此时需要一种编码方法向服务器发送请求,js可以满足这种需求。
德科杜里()
decodeURIComponent()
encodeURI()
encodeURIComponent()
(一般使用encodeURI()和encodeURIComponent())
Encori()是Javascript中真正用于编码URL的函数。它侧重于对整个URL进行编码,所以除了常见的符号之外,URL中还有一些其他具有特殊含义的符号';/? @
2.url的编码和解码方式
url的在线编码和解码工具:
1、基本知识
URLEncode:是指针对网页url中的中文字符的一种编码转化方式,最常见的就是Baidu、 Google等搜索引擎中输入中文查询时候,生成经过 Encode过的网页URL。URLEncode的方式一般有两种一种是传统的基于GB2312的Encode(Baidu、Yisou等使用),一种是 基于UTF-8的Encode(Google,Yahoo等使用)。本工具分别实现两种方式的Encode与Decode。
中文 -> GB2312的Encode ->
中文 -> UTF-8的Encode -> 中文
Html中的URLEncode:
编码为GB2312的html文件中,
中文.rar -> 浏览器自动转换为 -> .rar
注意:Firefox对GB2312的Encode的中文URL支持不好,因为它默认是UTF-8编码发送URL的,但是ftp://协议可以,我试过了.我认为这应该算是Firefox一个bug.
编码为UTF-8的html文件中,
中文.rar -> 浏览器自动转换为 -> 中文.rar
PHP中的URLEncode:
//GB2312的Encode
echo urlencode(“中文-_. “).”n”; // -_.+
echo urldecode(“-_. “).”n”; //中文-_.
echo rawurlencode(“中文-_. “).”n”; // -_.
echo rawurldecode(“-_. “).”n”; //中文-_.
?>
除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。
urlencode和rawurlencode的区别:
urlencode 将空格则编码为加号(+)
rawurlencode 将空格则编码为加号( )
如果要使用UTF-8的Encode,有两种方法:
一、将文件存为UTF-8文件,直接使用urlencode、rawurlencode即可。
二、使用mb_convert_encoding函数。
$url = ‘中文.rar’;
echo urlencode(mb_convert_encoding($url, ‘utf-8′, ‘gb2312′)).”n”;
echo rawurlencode(mb_convert_encoding($url, ‘utf-8′, ‘gb2312′)).”n”;
//中文.rar
?>
实例:
function parseurl($url=”")
{
$url = rawurlencode(mb_convert_encoding($url, ‘gb2312′, ‘utf-8′));
$a = array(“:”, “/”, “@″);
$b = array(“:”, “/”, “@”);
$url = str_replace($a, $b, $url);
return $url;
}
$url=”ftp://ud03:password@ud03.kinoko.name/中文/中文.rar”;
echo parseurl($url);
//ftp://ud03:password@ud03.kinoko.name//.rar
?>
JavaScript中的URLEncode:
中文-_. 中文-_.
encodeURI 不对下列字符进行编码:“:”、“/”、“;”、“?”、“@”等特殊字符。
中文.rar中文.rar
2、示例
1)utf-8解码
&ckn=91142321196129
2)gb2312解码
针吠塑 浈?&ckn=91142321196129
3.JS对URL进行编码和解码
Javascript语言用于编码的函数,一共有三个,最古老的一个就是escape()。虽然这个函数现在已经不提倡使用了,但是由于历史原因,很多地方还在使用它,所以有必要先从它讲起。
实际上,escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。比如"春节"的返回结果是%u6625%u8282,也就是说在Unicode字符集中,"春"是第6625个(十六进制)字符,"节"是第8282个(十六进制)字符。
它的具体规则是,除了ASCII字母、数字、标点符号"@ * _ + - . /"以外,对其他所有字符进行编码。在u0000到u00ff之间的符号被转成%xx的形式,其余符号被转成%uxxxx的形式。对应的解码函数是unescape()。
还有两个地方需要注意。
首先,无论网页的原始编码是什么,一旦被Javascript编码,就都变为unicode字符。也就是说,Javascipt函数的输入和输出,默认都是Unicode字符。
这一点对下面两个函数也适用。
其次,escape()不对"+"编码。但是我们知道,网页在提交表单的时候,如果有空格,则会被转化为+字符。服务器处理数据的时候,会把+号处理成空格。所以,使用的时候要小心。
例如:
编码:
解码:
encodeURI()是Javascript中真正用来对URL编码的函数。
它着眼于对整个URL进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号"; / ? : @ & = + $ , #",也不进行编码。编码后,它输出符号的utf-8形式,并且在每个字节前加上%。
它对应的解码函数是decodeURI()。
例如:
编码:
解码:
最后一个Javascript编码函数是encodeURIComponent()。与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。
因此,"; / ? : @ & = + $ , #",这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码。至于具体的编码方法,两者是一样。
它对应的解码函数是decodeURIComponent()。
例如:
编码:
解码:
参考文章:
阮一峰:关于URL编码
4.JS对URL字符串进行编码/解码分析
虽然escape()、encodeURI()、encodeURIComponent()三种方法都能对一些影响URL完整性的特殊
字符进行过滤。但后两者是将字符串转换为UTF-8的方式来传输,解决了页面编码不一至导致的乱码问
题。例如:发送页与接受页的编码格式(Charset)不一致(假设发送页面是GB2312而接收页面编码是
UTF-8),使用escape()转换传输中文字串就会出现乱码问题。
以下是JS下对URL进行编/解码的各种方法:
escape
方法:
返回一个可在所有计算机上读取的编码
String
对象。
function
escape(charString
:
String)
:
String
不会被此方法编码的字符:
@
*
/
+
说明:escape
方法返回一个包含
charstring
内容的字符串值(Unicode
格式)。所有空格、标点、
重音符号以及任何其他非
ASCII
字符都用
%xx
编码替换,其中
xx
等于表示该字符的十六进制数。
例如,空格返回为“%20”。(字符值大于
255
的字符以
%uxxxx
格式存储。)
注意:escape
方法不能用来对“统一资源标识符”(URI)
进行编码。对其编码应使用
encodeURI
和
encodeURIComponent
方法。
encodeURI
方法:返回编码为有效的统一资源标识符
(URI)
的字符串。
function
encodeURI(URIString
:
String)
:
String
不会被此方法编码的字符:!
@
#
$
&
*
(
)
=
:
/
;
?
+
说明:encodeURI
方法返回一个已编码的
URI。如果将编码结果传递给
decodeURI,则将返回初始的
字符串。encodeURI
不对下列字符进行编码:“:”、“/”、“;”和“?”。请使用
encodeURIComponent
对这些字符进行编码。
encodeURIComponent
方法:返回编码为统一资源标识符
(URI)
的有效组件的字符串。
function
encodeURIComponent(encodedURIString
:
String)
:
String
不会被此方法编码的字符:!
*
(
)
说明:encodeURIComponent
方法返回一个已编码的
URI。如果将编码结果传递给
decodeURIComponent,则将返回初始的字符串。因为
encodeURIComponent
方法将对所有字符编码,
请注意,如果该字符串代表一个路径,例如
/folder1/folder2/default.html,则其中的斜杠也将被
编码,这样,当该字符串作为请求发送到
Web
服务器时它将是无效的。如果字符串中包含多个
URI
组件,请使用
encodeURI
方法进行编码。
unescape
方法:从用
escape
方法编码的
String
对象中返回已解码的字符串。
function
unescape(charString
:
String)
:
String
说明:unescape
方法返回一个包含
charstring
内容的字符串值。所有以
%xx
十六进制形式编码的
字符都用
ASCII
字符集当中等效的字符代替。(以
%uxxxx
格式(Unicode
字符)编码的字符用十六
进制编码
xxxx
的
Unicode
字符代替。)
注意:unescape
方法不应用于解码“统一资源标识符”(URI)。请改用
decodeURI
和
decodeURIComponent
方法。
decodeURI
方法:
返回一个已编码的统一资源标识符
(URI)
的非编码形式。
function
decodeURI(URIstring
:
String)
:
String
decodeURIComponent
方法:返回统一资源标识符
(URI)
的一个已编码组件的非编码形式。
function
decodeURIComponent(encodedURIString
:
String)
:
String
BTW:C#中对URL编码的方法。。。
编码:Server.UrlEncode(string)
解码:Server.UrlDecode(string)
前面三种客户端编码都可以用这个方法在后台解码。
以上就是关于「如何对url进行编码」的全部内容,本文讲解到这里啦,希望对大家有所帮助。如果你还想了解更多这方面的信息,记得收藏关注本站~
【Win10系统之家①独①家使用,转载请注明出处!】
相关文章
-
1.url如何编码解码?为什么要编码?一般来说,网址只能使用英文字母、阿拉伯数字和一些标点符号,不能使用其他文字和符号,因为网络标准RFC。1738年制定了一个硬性规定。如果网址中有汉字,就必须编码使用。但问题是,RFC738中...
-
1.怎么有效运用b2b平台进行企业推广(1)一定要发布产品,这样可以起到产品宣传的作用(2)一定要正确选择关键词,不然一切也是白费。注册B2B网站的目的就是为了关键词排名(3)一定要记录统计,特别提示一下,尤其是关于该b2b...
-
1.怎么给电脑系统备份?1、硬盘间的复制:有些朋友可能遇到这种情况,比如有两个容量一致的硬盘,其中一个有可以正常运行的操作系统,另一个则为空盘,那么你无需在第二块硬盘上安装WIN98,只需要使用GHOST在很短的时间内就...
-
1.如何备份sqlserver数据库文件SQLServer本身提供了非常完善的数据库备份功能。用户可以将数据库备份到本地磁盘上的安全位置,以便在需要时快速恢复。备份数据库的步骤如下:1.单击开始所有程序MicrosoftSQLServer企业...