url的编码和解码方式

url的编码和解码方式,第1张

url的在线编码和解码工具: http://tool.chinaz.com/tools/urlencode.aspx

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文件中,

http://ud03.kinoko.name/中文.rar ->浏览器自动转换为 ->http://ud03.kinoko.name/����.rar

注意:Firefox对GB2312的Encode的中文URL支持不好,因为它默认是UTF-8编码发送URL的,但是ftp://协议可以,我试过了.我认为这应该算是Firefox一个bug.

编码为UTF-8的html文件中,

http://ud03.kinoko.name/中文.rar ->浏览器自动转换为 ->http://ud03.kinoko.name/中文.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 = ‘http://ud03.kinoko.name/中文.rar’

echo urlencode(mb_convert_encoding($url, ‘utf-8′, ‘gb2312′)).”\n”

echo rawurlencode(mb_convert_encoding($url, ‘utf-8′, ‘gb2312′)).”\n”

//http://ud03.kinoko.name/中文.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 不对下列字符进行编码:“:”、“/”、“”、“?”、“@”等特殊字符。

http://ud03.kinoko.name/中文.rarhttp://ud03.kinoko.name/中文.rar

2、示例

http://canvas.gdt.qq.com/canvas/1?viewid=%12%0C%08%E1%98%B7%CD%CB%DC%14%20%E4%A5%01%18%FF%89%18&ckn=91142321196129

1)utf-8解码

http://canvas.gdt.qq.com/canvas/1?viewid=�ᘷ���� ������&ckn=91142321196129

2)gb2312解码

http://canvas.gdt.qq.com/canvas/1?viewid=�针吠塑� 浈��?&ckn=91142321196129

VC环境实现UrlDecode示例

/*

URLEncode是这样编码的

1。数字和字母不变。

2。空格变为"+"号。

3。其他被编码成"%"加上他们的ascii的十六进制,规律是这样的

比如“啊”字 Ascii的十六进制是B0A1——>%B0%A1(Note:它是每个字节前加个%)。

*/

#include <iostream>

#include <string>

#include <fstream>

#include <ctype.h>

#include <stdlib.h>

using namespace std

typedef unsigned char BYTE

inline BYTE toHex(const BYTE &x)

{

return x > 9 ? x + 55: x + 48

}

string urlEncoding( string &sIn )

{

cout << "size: " << sIn.size() << endl

string sOut

for( int ix = 0 ix < sIn.size() ix++ )

{

BYTE buf[4]

memset( buf, 0, 4 )

if( isalnum( (BYTE)sIn[ix] ) )

{

buf[0] = sIn[ix]

}

else if ( isspace( (BYTE)sIn[ix] ) )

{

buf[0] = '+'

}

else

{

buf[0] = '%'

buf[1] = toHex( (BYTE)sIn[ix] >> 4 )

buf[2] = toHex( (BYTE)sIn[ix] % 16)

}

sOut += (char *)buf

}

return sOut

}

int main(int argc, char *argv[])

{

string src

ifstream inFile( "in.txt" )

if( !inFile )

{

cout << "not in.txt to read" << endl

system("PAUSE")

return -1

}

inFile >> src

string sOut = urlEncoding( src )

cout << sOut << endl

system("PAUSE")

return 0

}

PHP urldecode示例

$str1=urlencode("百度") //$str1的值是%B0%D9%B6%C8

$str2=urldecode($str1) //$str2的值就是“百度”

通过以下两种方式都可以编码和解码

1、

用JS对URL进行编码和解码

JavaScript中有三个可以对字符串编码的函数,分别是:

escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent。

escape()

函数可对字符串进行编码

语法

escape(string)

encodeURI()

函数可把字符串作为

URI

进行编码。

语法

encodeURI(URIstring)

该方法的目的是对

URI

进行完整的编码,因此对以下在

URI

中具有特殊含义的

ASCII

标点符号,encodeURI()

函数是不会进行转义的:/?:@&=+$,#

encodeURIComponent()

函数

encodeURIComponent()

函数可把字符串作为

URI

组件进行编码。

escape()除了

ASCII

字母、数字和特定的符号外,对传进来的字符串全部进行转义编码,因此如果想对URL编码,最好不要使用此方法。而encodeURI()

用于编码整个URI,因为URI中的合法字符都不会被编码转换。encodeURIComponent方法在编码单个URIComponent(指请求参数)应当是最常用的,它可以讲参数中的中文、特殊字符进行转义,而不会影响整个URL。

2、用asp.net

对URL进行编码和解码

用System.Web.HttpUtility.UrlEncode编码:

string

tmp1

=

System.Web.HttpUtility.UrlEncode(".net技术",

System.Text.Encoding.GetEncoding("GB2312"))

string

tmp2

=

System.Web.HttpUtility.UrlEncode(".net技术",

System.Text.Encoding.UTF8)

用System.Web.HttpUtility.UrlDecode

或者

Server.UrlEncode

相应的进行解码

参考资料:

URL如何编码与解码

http://www.studyofnet.com/news/167.html


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11449998.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存