- 小教板
-
怎么将汉字转为url编码
urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%。 urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其原理就是把十六进制字符串转换为中文字符
为什么需要urlEncode
字符串数据以url的形式传递给web服务器时,对字符是有限制的。为了符合url的规范,这些被限制的字符,就需要被转义。比方说:把一个邮箱放入url就需要转义,因为邮箱中包含限制字符 @ 。 在标准的url规范中,中文和很多的字符是不允许出现在url中的。这些需要转义的字符都将被替换成 % 后跟两位十六进制数。 这些字符都是不可打印的,自然需要进行转化。 例如:emoji字符U0001f474U0001f3fbU0001f46eU0001f3fd,转化也是理所当然的。 url中的分隔符包含主要分隔符 :#[]@?/ 和次要分隔符 !$&"()*+,;= 。对于url的 query 参数和值,如果在分隔符的包含范围内,除了 ? 和 / 外,都需要转义。例如:对于原始url https://www.baidu.com?paramA=哈哈¶mB=& 来说, 哈哈 和 paramB=& 中的 & 就需要参与转义。否则,对于 & 来说,你认为它是一个参数值,还是url本身的分隔符呢? 例如:空格。为了避免歧义,需要被转化成 + 或者 %20 。具体转换成 + 还是 %20 主要依据不同的转换标准。 AFURLRequestSerialization 的源码很好地说明了转义的过程和规则:2023-07-15 01:46:271
Base64和urlencode
使用base64的初衷。是为了方便把含有不可见字符串的信息用可见字符串表示出来 我们知道在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。 而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。 urlencode url编码主要是为了解决一些url中的一些特殊字符和歧义字符或者中文字符的传输问题, 1. base64编码里面有一个 “+” 号,在urlecode编码中 “+” 会被解码成空格,urlencode时,"+" 号肯定是由空格编码出来的,但是base64编码的结果中 "+" 不是空格编码出来的,如果将base64编码作为安全的url编码使用,则 “+” 将被解码成空格,这是我们不愿看到的; 所以不要base64编码作为url编码来使用. 2. 我们知道http头里面可能会用base64编码来传输一些信息,因为这些信息不会被web服务器默认做url解码的,我们可以得到原始的编码信息, 所以http头里面使用base64编码是可以接受的 。 用base64编码后再进行URL编码,再传输可能会避免此类问题。 Base64编码将二进制数据按照每三个字节转换成四个字节可读字符,编码后的字符长度大约为136.1%。字符范围为 A-Z a-z 0-9 +。但编码后的字符串不太适合使用URL传输,中文加密后的乱码也多是因为这个原因引起:放在url中传输时+号会被替换成空格;并且每76个字符都会添加一个换行" ",这个换行符合会丢失。 例如: 哈哈哈哈哈哈。。。。 会被编码为: uf65/rn+uf65/rn+oaOho6GjDQoNCrn+uf65/rn+uf65/qGjoaOhow0KDQq5/rn+uf65/rn+uf6h o6GjoaM= 放在URL中传输时会变成(不是urlencode的意思,并没有urlencode) uf65/rn uf65/rn oaOho6GjDQoNCrn uf65/rn uf65/qGjoaOhow0KDQq5/rn uf65/rn uf6h o6GjoaM= 解析肯定会出问题。 所以在传输和解密时要做如下处理: 1.去掉 2.替换空格为+ 获取到的请求数据 eyJqb3NfcGFyYW1ldGVycyI6eyJhcHBfa2V5IjoiNDUyNDJFMkU0QjA3RTNCODcyRDExNjM1MTUyRjY1MzIiLCJlbmRfZGF0ZSI6MTQ2OTgwODAwMDAwMCwiaXRlbV9jb2RlIjoiRldfR09PRFMtNDY4MTAtMSIsInVzZXJfbmFtZSI6IueIseWxi awj WumOaWueaXl iIsOW6lyIsInZlcnNpb25fbm8iOjF9fQ== Base64编码 使用的字符包括大小写字母各26个,加上10个数字,和加号“+”,斜杠“/”,一共64个字符,等号“=”用来作为后缀用途。 其中的+, /, = 都是需要urlencode的,所以无法取代。 不能,base64有转码功能: 由于 ASCII 码称为了国际标准,所以我们要把其它字符转成 ASCII 就要用到 base64。 utf-8 -> base64(编码) -> ASCII ASCII -> base64(解码) -> utf-8 这样就可以让只支持 ASCII 的计算机支持 utf-8 了。 参考: https://juejin.im/post/5b7d50106fb9a019d74757852023-07-15 01:46:361
什么是urlencode编码
不是很理解你的意思从HTTP协议来讲, 一个标准的URL是有固定的编码方式的,它只能包含固定的字符集比如你输入一个网址http://www.baidu.com/s?wd=我&cl=3, 在访问这个网址的时候网络上传输的时候,‘我"这字会变成%CE%D2 这种编码网站收到你这个网址的时候,再把%CE%D2 转换成 ‘我"字才能理解你这个网址的意思2023-07-15 01:46:442
Urlencode问题
1、Base64加密后的数据,如果包含加号,通过http传到后端后会出现解析异常。 2、后端的数据经过urlencode传给前端,前端拿到的数据是编译过的; 而前端把经过urlencode的数据传给后端,后端会自动将数据进行decode解析。 3、后端Java对参数进行urlencode和decode 4、前端对参数进行urlencode和decode2023-07-15 01:46:541
base64 和 urlencode的区别
1.urlencodeurl编码主要是为了解决一些url中的一些特殊字符和歧义字符或者中文字符的传输问题,举个Python代码例子# -*- coding: utf-8 -*- import urllib #/url?广州=020 query = {"广州":"020"} url = "/url?%s" % urllib.urlencode(query) print url #编码后 /url/?%E5%B9%BF%E5%B7%9E=020 print urllib.unquote(url) #解码后 /url?广州=020 2.base64理解成可逆加密算法,只能防肉眼看到真实内容,举个python代码例子:# -*- coding: utf-8 -*- import base64 s = "abc" a = base64.b64encode(s) #编码 print a #编码后输出"YWJj" print base64.b64decode(a) #解码后输出"abc" 3.sha1/md5可以理解成不可逆加密算法,举个Python代码例子:# -*- coding: utf-8 -*- import hashlib m = hashlib.md5() m.update("password") #对"password"加密 print m.hexdigest() #输出"5f4dcc3b5aa765d61d8327deb882cf99"2023-07-15 01:47:042
urlencode进行转换后 为什么空格是+号 不是%20
urlencode 将空格转换成+号rowurlencode 将空格转换成%202023-07-15 01:47:122
base64 和 urlencode的区别
1.urlencodeurl编码主要是为了解决一些url中的一些特殊字符和歧义字符或者中文字符的传输问题,举个Python代码例子[python] view plain copyimport urllib query = {"广州":"020"} url = "/url?%s" % urllib.urlencode(query) print url #编码后 /url/?%E5%B9%BF%E5%B7%9E=020 print urllib.unquote(url) #解码后 /url?广州=020 2.base64理解成可逆加密算法,只能防肉眼看到真实内容,举个python代码例子:[python] view plain copy# -*- coding: utf-8 -*- import base64 s = "abc" a = base64.b64encode(s) #编码 print a #编码后输出"YWJj" print base64.b64decode(a) #解码后输出"abc" 3.sha1/md5可以理解成不可逆加密算法,举个Python代码例子:[python] view plain copy# -*- coding: utf-8 -*- import hashlib m = hashlib.md5() m.update("password") #对"password"加密 print m.hexdigest() #输出"5f4dcc3b5aa765d61d8327deb882cf99"2023-07-15 01:47:441
php中urldecode()和urlencode()起什么作用啊
url 加密 与 解密 。 其实就是对url中字符串进行编码。 比如你的字符串是这样“ DSA啊撒旦撒答撒旦撒DSADSADSA ” ,encode之后就是这样的 “ DSA%e5%95%8a%e6%92%92%e6%97%a6%e6%92%92%e7%ad%94%e6%92%92%e6%97%a6%e6%92%92DSADSADSA ” 。2023-07-15 01:47:533
iOS中urlencode
iOS开发过程中有很多的编码,最近使用了urlencode编码,使用这个编码的主要作用是解决url中出现中文或者特殊字符在网络传输过程中出现的乱码. 实际上是第一步先创建要转义的字符集合,.然后再使用 stringByAddingPercentEncodingWithAllowedCharacters方法进行转义. 字符串nickname就是通过urlencode转义之后的字符. invertedSet 这个设置是必须要用的,不然转义set集合不会起到作用. 这是打印的hString2的urlencode之后的值,显而易见,这是转换成功的.2023-07-15 01:48:001
如何用Java实现URLEncode
以下是用Java使用查表法实现一下urlEncode(RFC1738)public final static String[] encodeTable = new String[2^8];static{ for(int i=0;i<256;i++) { if(i>="0" && i<="9" || i>="a"&&i<="z" || i>="A" && i<="Z" ||| i=="-" || i=="_" || i==".") { encodeTable[i] = (char)i + ""; }else { encodeTable[i] = "%" + String.format("%02x",i).toUpperCase(); } }}public String urlEncode(final String sourceStr){ final StringBuilder sb = new StringBuilder(); for(int i=0;i<sourceStr.length;i++) { sb.append(encodeTable[sourceStr.charAt(i) && 0xFF]); }}2023-07-15 01:48:103
怎么将字符串转码成urlencode的形式
URLEncode方法是把任何我们给出的参数转换成适合放在URL中的字符串。具体规则:1。字母,数字,连字符不变。2。空格转换成加号。3。其他所有的字符转换成用百分号表示,后跟字符的两位十六进制编码。 URLDecode功能相反。例子:String param = request.getParameter("userName"); // param:%E5%AD%99%E6%82%9F%E7%A9%BA1String userName = URLDecoder.decode(param, "UTF-8"); // 孙悟空1urlEncodeuserName // 孙悟空1String url = URLEncoder.encode(userName, "UTF-8"); //%E5%AD%99%E6%82%9F%E7%A9%BA1这样就很清楚了,urlencode是转码,urldecode是解码2023-07-15 01:48:301
HttpUtility.UrlEncode是什么意思?
看HttpUtility.UrlEncode(fi.FullName, System.Text.Encoding.UTF8)主要是解决包含非英文/数字名称的问题,免得出现乱码 而Response.AppendHeader是添加HTTP表头,Content-Dispostion是HTTP协议,Attachment是说这个文件作为附件下载2023-07-15 01:48:383
求解,htmlencode和urlencode的区别,适用场合
htmlencode的目的:将<和>尖括号等符号转掉,避免网页直接渲染标签,防止攻击。 "<hello>world</hello>" 转成 "<hello>world</hello>" urlencode的目的:将url中的特殊字符转义,让浏览器方便处理,比如空格、加号等 (url只能使用ASCII character-set,除此之外,都要转义) "hello+world = hello world" 转成 "hello%2Bworld+%3D+hello+world" 除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。2023-07-15 01:48:461
UrlEncode()方法有什么用呢?
url传参时对参数进行编码转换2023-07-15 01:48:542
python3.4中urllib 有没有urlencode函数
python3.x中urlencode在urllib.parse模块中使用方式urllib.parse.urlencodeurllib.parse.urlencode(query, doseq=False, safe="", encoding=None, errors=None, quote_via=quote_plus)Convert a mapping object or a sequence of two-element tuples, which may contain str or bytes objects, to a “percent-encoded” string. If the resultant string is to be used as a data for POST operation with urlopen() function, then it should be properly encoded to bytes, otherwise it would result in a TypeError.The resulting string is a series of key=value pairs separated by "&" characters, where both key and value are quoted using the quote_via function. By default, quote_plus() is used to quote the values, which means spaces are quoted as a "+" character and ‘/" characters are encoded as %2F, which follows the standard for GET requests (application/x-www-form-urlencoded). An alternate function that can be passed as quote_via is quote(), which will encode spaces as %20 and not encode ‘/" characters. For maximum control of what is quoted, use quote and specify a value for safe.When a sequence of two-element tuples is used as the query argument, the first element of each tuple is a key and the second is a value. The value element in itself can be a sequence and in that case, if the optional parameter doseq is evaluates to True, individual key=value pairs separated by "&" are generated for each element of the value sequence for the key. The order of parameters in the encoded string will match the order of parameter tuples in the sequence.The safe, encoding, and errors parameters are passed down to quote_via (the encoding and errors parameters are only passed when a query element is a str).To reverse this encoding process, parse_qs() and parse_qsl() are provided in this module to parse query strings into Python data structures.Refer to urllib examples to find out how urlencode method can be used for generating query string for a URL or data for POST.Changed in version 3.2: Query parameter supports bytes and string objects.2023-07-15 01:49:032
如何用Java实现URLEncode
无需用Java实现URLEncode,jdk有已经实现了。用法如下:String urlStr = java.net.URLEncoder.encode("hello,百度", "GBK"); 输出urlStr:%C8%CE%BA%F0%B2%F0%B0%A1String keyWord = java.net.URLDecoder.decode("%C8%CE%BA%F0%B2%F0%B0%A1", "GBK");输出keyWord:hello,百度2023-07-15 01:49:183
如何将URLEnCode后的字符串解码还原成中文
urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%。 urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其原理就是把十六进制字符串转换为中文字符2023-07-15 01:49:271
Server.URLEncode 编码是怎么决定的?
情况一网页编码是 UTF-8,Server.URLEncode("静态文字"),此时输出“静态文字”的 UTF-8 编码 %E9%9D%99%E6%80%81%E6%96%87%E5%AD%97。因为网页是 UTF-8 的,“静态文字”这几个字就是 UTF-8 的,所以 Server.URLEncode 也是按 UTF-8 来编码的。 情况二网页编码是 UTF-8,Server.URLEncode(rs("content")),内容是通过 RecordSet 从 SQL Server 数据库中的 content 字段读取的,虽然数据库中是使用 Unicode 编码来存的,但由于 IIS 去读的时候,会使用默认的转换,即 Unicode 到 ANSI(gb2312)。所以 rs("content") 是 ANSI(gb2312)的,所以 Server.URLEncode 是按 ANSI(gb2312)编码的,而不是按 UTF-8。2023-07-15 01:49:341
有高手知道这种URLEncode的编码规则么
如果用正常URLEncode格式,我们通常写的URLDecode函数会把在0-128之间的字节当做ASCII处理了,所以它要用%加低位的国标码连带的高位的char值来编码,刚才找到一篇文章,里面称:Big5码是在台湾和香港等地广为使用的计算机汉字编码方案,使用的是繁体字 ,因最高位被置1,所以也不能直接在7位的网络系统中传输。我想这就是“卫”被编码成%bd%c3而“理”被编码成%b2z的原因了2023-07-15 01:49:431
如何用 VB 或 VB.Net 来撰写 ASP 的 Server.URLencode 函数
请参考底下做法:VB.Net 程式码如下 :Public Function URLEncode(ByRef strEnc As String) As StringDim strTmp2, strChar, strTmp, strRet As StringDim lngLoop As IntegerFor lngLoop = 0 To strEnc.Length - 1strChar = strEnc.Substring(lngLoop, 1)Select Case Asc(strChar)Case 48 To 57, 65 To 90, 97 To 122strRet &= strCharCase 32strRet &= "+"Case ElsestrTmp = Hex(Asc(strChar))If strTmp.Length > 4 Then strTmp = strTmp.Substring(4)strRet &= "%" & strTmp.Substring(0, 2)If strTmp.Length > 2 ThenstrTmp2 = strTmp.Substring(2)strRet &= IIf(IsNumeric(strTmp.Substring(2, 1)), Chr(Val("&H" & strTmp2)), "%" & strTmp2)End IfEnd SelectNextURLEncode = strRetEnd Function或Public Function URLenc(ByVal strEnc As String) As StringDim lngLoop, lngAsc As LongDim strChr As StringFor lngLoop = 0 To strEnc.Length - 1strChr = strEnc.Substring(lngLoop, 1)If Math.Abs(Asc(strChr)) < 255 ThenURLenc &= strChrElselngAsc = Asc(strChr)If lngAsc < 0 Then lngAsc = lngAsc + 65536URLenc &= "%" & Hex((lngAsc And -256) 255) & "%" & Hex(lngAsc And 255)End IfNextEnd Function呼叫:MessageBox.Show(URLEncode("强力鎯头 PowerHammer !"))MessageBox.Show(URLenc("强力鎯头 PowerHammer !"))结果显示 :%B1j%A4O%EE%CF%C0Y+PowerHammer+%21%B1%6A%A4%4F%EE%CF%C0%59 PowerHammer ! ================================================================VB6 程式码如下 :Public Function URLEncode(strEnc As String) As StringDim strChar As String, strTmp As String, strTmp2 As String, strRet As StringDim lngLoop As LongFor lngLoop = 1 To Len(strEnc)strChar = Mid(strEnc, lngLoop, 1)Select Case Asc(strChar)Case 48 To 57, 65 To 90, 97 To 122strRet = strRet & strCharCase 32strRet = strRet & "+"Case ElsestrTmp = Format(Hex(Asc(strChar)), "00")strRet = strRet & "%" & Left(strTmp, 2)strTmp2 = Mid(strTmp, 3, 2)If Len(strTmp) > 3 ThenstrRet = strRet & IIf(IsNumeric(Mid(strTmp, 3, 1)), Chr(Val("&H" & strTmp2)), "%" & strTmp2)End IfEnd SelectNextURLEncode = strRetEnd Function或Public Function URLenc(strEnc As String) As StringDim lngLoop As Long, lngAsc As LongDim strChr As StringFor lngLoop = 1 To Len(strEnc)strChr = Mid(strEnc, lngLoop, 1)If Abs(Asc(strChr)) < 255 ThenURLenc = URLenc & strChrElselngAsc = Asc(strChr)If lngAsc < 0 Then lngAsc = lngAsc + 65536URLenc = URLenc & "%" & Hex((lngAsc And -256) 255) & "%" & Hex(lngAsc And 255)End IfNextEnd Function呼叫:MsgBox URLEncode("强力鎯头 PowerHammer !")MsgBox URLenc("强力鎯头 PowerHammer !")结果显示 :%B1j%A4O%EE%CF%C0Y+PowerHammer+%21%B1%6A%A4%4F%EE%CF%C0%59 PowerHammer ! ================================================================ASP 程式码如下(多此一举,因为ASP本来就有Server.URLencode) :Public Function URLEncode(strEnc)Dim strChr, intAsc, strTmp, strTmp2, strRet, lngLoopFor lngLoop = 1 To Len(strEnc)strChr = Mid(strEnc, lngLoop, 1)intAsc = Asc(strChr)If ((intAsc < 58) And (intAsc > 47)) Or ((intAsc < 91) And (intAsc > 64)) Or ((intAsc < 123) And (intAsc > 96)) ThenstrRet = strRet & strChrElseIf intAsc = 32 ThenstrRet = strRet & "+"ElsestrTmp = Hex(Asc(strChr))strRet = strRet & "%" & Right("00" & Left(strTmp, 2), 2)strTmp2 = Mid(strTmp, 3, 2)If Len(strTmp) > 3 ThenIf IsNumeric(Mid(strTmp, 3, 1)) ThenstrRet = strRet & Chr(CInt("&H" & strTmp2))ElsestrRet = strRet & "%" & strTmp2End IfEnd IfEnd IfNextURLEncode = strRetEnd Function或Public Function URLenc(strEnc)Dim lngLoop, lngAsc, strChrFor lngLoop = 1 To Len(strEnc)strChr = Mid(strEnc, lngLoop, 1)If Abs(Asc(strChr)) < 255 ThenURLenc = URLenc & strChrElselngAsc = Asc(strChr)If lngAsc < 0 Then lngAsc = lngAsc + 65536URLenc = URLenc & "%" & Hex((lngAsc And -256) 255) & "%" & Hex(lngAsc And 255)End IfNextEnd Function呼叫:Response.write URLEncode("强力鎯头 PowerHammer !")Response.write URLenc("强力鎯头 PowerHammer !")结果显示 :%B1j%A4O%EE%CF%C0Y+PowerHammer+%21%B1%6A%A4%4F%EE%CF%C0%59 PowerHammer !2023-07-15 01:50:161
php 编程问题:只对链接中的 中文 进行urlencode转换,怎样处理
同意davidaq的2023-07-15 01:50:263
如何用bat批处理txt中的URL编码?
首先,你这个前提是不可能出现的2023-07-15 01:50:341
如何用Java实现URLEncode
String mytext = java.net.URLEncoder.encode("中国", "utf-8");String mytext2 = java.net.URLDecoder.decode(mytext, "utf-8");这两条语句在同一个页面中的话,得到的结果是:mytext: %E4%B8%AD%E5%9B%BDmytex2: 中国String zhongguo=new String(request.getParameter("zhongguo").getBytes("iso8859_1"));zhongguo=java.net.URLDecoder.decode(zhongguo,"utf-8");2023-07-15 01:50:431
php 编码转换
URLEncode:是指针对网页url中的中文字符的一种编码转化方式,最常见的就是Baidu、Google等搜索引擎中输入中文查询时候,生成经过Encode过的网页URL。URLEncode的方式一般有两种,一种是传统的基于GB2312的Encode(Baidu、Yisou等使用),另一种是基于UTF-8的Encode(Google、Yahoo等使用)。本工具分别实现两种方式的Encode与Decode:中文->GB2312的Encode->%D6%D0%CE%C4中文->UTF-8的Encode->%E4%B8%AD%E6%96%87我们可以用以下代码实现转换:<?phpechourlencode("测试");?>如果是gb2312编码,转换的结果为"%B2%E2%CA%D4";如果是utf-8编码,转换的结果为"%E6%B5%8B%E8%AF%95";希望我的回答你能满意啊!呵呵!2023-07-15 01:50:501
ubuntu怎么得到urlencode编码
在 Java、.net 和 JS 中都有相应的 encodeURL 方法可用,在 Objective-C 语言中,你可以试下- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc;来对完整的 URL(带请求参数的)进行编码,比如执行下面的代码: NSString *url=@"http://unmi.cc?p1=%+&sd &p2=中文"; NSString *encodedValue = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];上面代码转换出的 encodedValue 是:http://unmi.cc?p1=%25+&sd%20&p2=%E4%B8%AD%E6%96%87可见,它不会转换 URL 中的 ?%& 符号,这也正常,因为它肯定分不出哪个 & 是参数的连接符号还是参数值,你可以单独编码参数,然后在拼接成 URL 之前把属性参数值中的 ?%& 等符号分别替换成相应的编码。或者,您还可以试下另外一个方法来单独编码参数值,然后拼接成完整的 URL:/* newString = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, origString, NULL, NULL, kCFStringEncodingUTF8); */CF_EXPORTCFStringRef CFURLCreateStringByAddingPercentEscapes(CFAllocatorRef allocator, CFStringRef originalString, CFStringRef charactersToLeaveUnescaped, CFStringRef legalURLCharactersToBeEscaped, CFStringEncoding encoding);本文原始链接:http://unmi.cc/objective-c-urlencode, 来自:隔叶黄莺 Unmi Blog参考代码,分别编码前面的 p1=%+&sd f&p2=中文,两个参数的代码和结果如下:NSString *param = @"%+&sd f"; NSString *encodedValue = (NSString*)CFURLCreateStringByAddingPercentEscapes(nil, (CFStringRef)param, nil, (CFStringRef)@"!*"();:@&=+$,/?%#[]", kCFStringEncodingUTF8);这样编码出来的 encodedValue 为 %25%2B%26sd%20f,对 ?%& 等符号也会编码的。用上面的代码对 “中文” 进行编码的结果是:%E4%B8%AD%E6%96%87,与前面是一致的。我实际应用时还是这个 CFURLCreateStringByAddingPercentEscapes 方法比较方便。我们在项目中是使用的 ASIHTTPRequest 组件来访问 URL 的,在使用 ASIFormDataRequest 时发出它其中有一个方法:- (NSString*)encodeURL:(NSString *)string{ NSString *newString = NSMakeCollectable([(NSString *)CFURLCreateStringByAddingPercentEscapes( kCFAllocatorDefault, (CFStringRef)string, NULL, CFSTR(":/?#[]@!$ &"()*+,;="<>%{}|\^~`"), CFStringConvertNSStringEncodingToEncoding([self stringEncoding])) autorelease]); if (newString) { return newString; } return @"";}看起来它就是个 Objective-C 版的 encodeURL 方法,可是它声明成了一个实例方法,必须构造出 ASIFormDataRequest 实例才能使用它,在它的父类 ASIHTTPRequest 中都无该方法。现在来试验一下这个方法的返回值:ASIFormDataRequest *formDataRequest = [ASIFormDataRequest requestWithURL:nil];NSString *encodedValue1 = [formDataRequest encodeURL:@"%+&sd f"];NSString *encodedValue2 = [formDataRequest encodeURL:@"中文"];得出的 encodedValue1 和 encodedValue2 分别是 %25%2B%26sd%20f 和 %E4%B8%AD%E6%96%87,和前面是一致的,所以你可以用 ASIFormDataRequest 提供的方式来进行 URLEncode,把这个方法提出为一个工具方法即可。2023-07-15 01:50:571
如何用Java实现URLEncode
String encode = URLEncoder.encode("GBK编码", "GBK");System.out.println("乱码" + encode);String decode = URLDecoder.decode(encode, "GBK");// GBK解码System.out.println(decode);2023-07-15 01:51:061
application/x-www-form-urlencode和application/json和的区别
application/x-www-form-urlencoded:我们form表单提交就是这个模式,并且将提交的数据进行urlencode。默认情况下,我们所有的表单提交都是通过这种默认的方式实现的。最常用的一种。 application/json:采用json格式提交,比如我们常用的ajax,...2023-07-15 01:51:141
谁能详细介绍一下server.URLEncode()怎么用?
ASP.net中的Server.UrlEncode函数和ASP中的Server.URLEncode函数返回的值不一样。试验代码:ASP.net 中:Response.Write(Server.UrlEncode("汇编"));返回:%e6%b1%87%e7%bc%96ASP 中: Response.Write Server.URLEncode("汇编") 返回:%BB%E3%B1%E0产生这个问题的原因:ASP.net 中的 Server.UrlEncode 默认是按照 UTF-8 编码方式进行处理的 ASP中是按照本地设置编码方式进行处理的。如果你在 ASP.net 下采用如下的编码: ASP 和 ASP.net 的结果就会一样: Response.Write(HttpUtility.UrlEncode("汇编",Encoding.Default));2023-07-15 01:51:342
HttpUtility.UrlEncode .net中的UrlEncode
GYGYGYGYGYGYGYGY2023-07-15 01:51:532
get和post的区别并讲解到urlencode和乱码问题
form有2中方法把数据提交给服务器,get和post,分别说下吧。(一)get提交 1.首先说下客户端(浏览器)的form表单用get方法是如何将数据编码后提交给服务器端的吧。 对于get方法来说,都是把数据串联在请求的url后面作为参数,如:http://localhost:8080/servlet?msg=abc(很常见的一个乱码问题就要出现了,如果url中出现中文或其它特殊字符的话,如:http://localhost:8080//servlet?msg=杭州,服务器端容易得到乱码),url拼接完成后,浏览器会对url进行URL encode,然后发送给服务器,URL encode的过程就是把部分url做为字符,按照某种编码方式(如:utf-8,gbk等)编码成二进制的字节码,然后每个字节用一个包含3个字符的字 符串 "%xy" 表示,其中xy为该字节的两位十六进制表示形式。我这里说的可能不清楚,具体介绍可以看下java.net.URLEncoder类的介绍在这里。了解了 URL encode的过程,我们能看到2个很重要的问题,第一:需要URL encode的字符一般都是非ASCII的字符(笼统的讲),再通俗的讲就是除了英文字母以外的文字(如:中文,日文等)都要进行URL encode,所以对于我们来说,都是英文字母的url不会出现服务器得到乱码问题,出现乱码都是url里面带了中文或特殊字符造成的;第二:URL encode到底按照那种编码方式对字符编码?这里就是浏览器的事情了,而且不同的浏览器有不同的做法,中文版的浏览器一般会默认的使用GBK,通过设置 浏览器也可以使用UTF-8,可能不同的用户就有不同的浏览器设置,也就造成不同的编码方式,所以很多网站的做法都是先把url里面的中文或特殊字符用 javascript做URL encode,然后再拼接url提交数据,也就是替浏览器做了URL encode,好处就是网站可以统一get方法提交数据的编码方式。 完成了URL encode,那么现在的url就成了ASCII范围内的字符了,然后以iso-8859-1的编码方式转换成二进制随着请求头一起发送出去。这里想多说 几句的是,对于get方法来说,没有请求实体,含有数据的url都在请求头里面,之所以用URL encode,我个人觉的原因是:对于请求头来说最终都是要用iso-8859-1编码方式编码成二进制的101010.....的纯数据在互联网上传 送,如果直接将含有中文等特殊字符做iso-8859-1编码会丢失信息,所以先做URL encode是有必要的。 2。服务器端(tomcat)是如何将数据获取到进行解码的。 第一步是先把数据用iso-8859-1进行解码,对于get方法来说,tomcat获取数据的是ASCII范围内的请求头字符,其中的请求url里面带 有参数数据,如果参数中有中文等特殊字符,那么目前还是URL encode后的%XY状态,先停下,我们先说下开发人员一般获取数据的过程。通常大家都是request.getParameter("name")获 取参数数据,我们在request对象或得的数据都是经过解码过的,而解码过程中程序里是无法指定,这里要说下,有很多新手说用 request.setCharacterEncoding("字符集")可以指定解码方式,其实是不可以的,看servlet的官方API说明有对此方 法的解释:Overrides the name of the character encoding used in the body of this request. This method must be called prior to reading request parameters or reading input using getReader().可以看出对于get方法他是无能为力的。那么到底用什么编码方式解码数据的呢,这是tomcat的事情了,默认缺省用的是 iso-8859-1,这样我们就能找到为什么get请求带中文参数为什么在服务器端得到乱码了,原因是在客户端一般都是用UTF-8或GBK对数据 URL encode,这里用iso-8859-1方式URL decoder显然不行,在程序里我们可以直接Java代码1. new String(request.getParameter("name").getBytes("iso-8859-1"),"客户端指定的URL encode编码方式") 还原回字节码,然后用正确的方式解码数据,网上的文章通常是在tomcat里面做个配置Xml代码1. <Connector port="8080" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000" redirectPort="8443" URIEncoding="GBK"/> 这样是让tomcat在获取数据后用指定的方式URL decoder,URL decoder的介绍在这里(二)post提交1.客户端(浏览器)的form表单用post方法是如何将数据编码后提交给服务器端的。 在post方法里所要传送的数据也要URL encode,那么他是用什么编码方式的呢? 在form所在的html文件里如果有段<meta http-equiv="Content-Type" content="text/html; charset=字符集(GBK,utf-8等)"/>,那么post就会用此处指定的编码方式编码。一般大家都认为这段代码是为了让浏览器知道用 什么字符集来对网页解释,所以网站都会把它放在html代码的最前端,尽量不出现乱码,其实它还有个作用就是指定form表单的post方法提交数据的 URL encode编码方式。从这里可以看出对于get方法来数,浏览器对数据的URL encode的编码方式是有浏览器设置来决定,(可以用js做统一指定),而post方法,开发人员可以指定。2。服务器端(tomcat)是如何将数据获取到进行解码的。如果用tomcat默认缺省设置,也没做过滤器等编码设置,那么他也是用iso-8859-1解码的,但是request.setCharacterEncoding("字符集")可以派上用场。我发现上面说的tomcat所做的事情前提都是在请求头里没有指定编码方式,如果请求头里指定了编码方式将按照这种方式编码。2023-07-15 01:52:011
PHP中urlencode 后的字符,用正则应该怎么表示?
有?的rul,必须要加个条件,例如:RewriteCond %{QUERY_STRING} ^(.*)tid=([0-9]+)-([0-9]+)-([0-9]+).html$RewriteRule ^(.*)$ /plus/list.php?tid=%2&totalresult=%3&PageNo=%4 [L]2023-07-15 01:52:083
HttpUtility.UrlEncode 编码输出的字母替小写,怎样改成大写呢
------最佳解决方案-------------------------------------------------------- Public Sub Main() Dim sInput, sRegex As String sInput = "aabbccddeeffcccgghhcccciijjcccckkcc" sRegex = "cc" Dim r As Regex = New Regex(sRegex) Dim myEvaluator As MatchEvaluator = New MatchEvaluator(AddressOf ReplaceCC) sInput = r.Replace(sInput, myEvaluator) Console.WriteLine(sInput)End SubPublic Function ReplaceCC(ByVal m As Match) As String Dim i As String = m.ToString.ToUpper Return i.ToString() ------其他解决方案--------------------------------------------------------引用:Encode之后的内容是给机器用的,也不是给人用的何必呢? 但是我要把编码后的字符串发送到服务器,服务器只识别大写的,小写的无法识别。 ------其他解决方案--------------------------------------------------------增加分数,继续等啊。高手现身吧。 ------其他解决方案--------------------------------------------------------System.Web.HttpUtility.UrlEncode( "", System.Text.UnicodeEncoding.GetEncoding( "GB2312 ")).ToUpper()) ------其他解决方案--------------------------------------------------------引用:System.Web.HttpUtility.UrlEncode( "", System.Text.UnicodeEncoding.GetEncoding( "GB2312 ")).ToUpper()) 这样就把整个字符串中的字母全部转换为大写了,我只需要把 %3a 这样的字符中的 字母转换为大写 ------其他解决方案--------------------------------------------------------动手写一个,看看能满足你的需求吧2023-07-15 01:52:231
什么是URL编码和URL解码?
urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%。 urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其原理就是把十六进制字符串转换为中文字符2023-07-15 01:52:312
怎么在smarty 使用urlencode函数
第一:自己用smarty重写这个函数.你如果是为了玩,可以自己写。第二:直接用php的原生态函数。 <{php}>urlencode("xxxxx")<{/php}>2023-07-15 01:52:382
asp中server.urlencode有什么用?怎么用?
urlencode 可以过滤一些特殊的字符 ...2023-07-15 01:52:463
.net中用 HttpUtility.UrlEncode()这个方法乱码,怎么解决
UrlDecode解码2023-07-15 01:52:544
浏览器自动对URL进行URLENCODE。怎么解决 - 技术问答
第一页的时候,URL通过urlencode解析成中文,然后点击第二页的连接,你传递的是什么?如果还是中文的话,不依然需要urlencode??不冲突啊,2023-07-15 01:53:041
如何用Java实现URLEncode
String encode = URLEncoder.encode("GBK编码", "GBK");System.out.println("乱码" + encode);String decode = URLDecoder.decode(encode, "GBK");// GBK解码System.out.println(decode);2023-07-15 01:53:252
base64 和 urlencode的区别
base64 1、包含A-Z a-z 0-9 和加号“+”,斜杠“/” 用来作为开始的64个数字. 等号“=”用来作为后缀用途。 2、2进制的. 3、要比源数据多33%。 4、常用于邮件。 urlencode 除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制2023-07-15 01:53:321
如何用 JavaScript 实现 PHP 中的 urlEncode 函数
引用下w3cschool对escape()的说明:ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它。可以看出这个函数就是个URL编码函数,因此在PHP中用 urlencode和urldecode函数就可以了。2023-07-15 01:53:391
如何用Java实现URLEncode
Stringencode=URLEncoder.encode("GBK编码","GBK");System.out.println("乱码"+encode);Stringdecode=URLDecoder.decode(encode,"GBK");//GBK解码System.out.println(decode);2023-07-15 01:53:482
python3.4中urllib 有没有urlencode函数?
有,python 3.x中urllib和urilib2合并成了urllib。其中urllib2.urlopen()变成了urllib.request.urlopen()urllib2.Request()变成了urllib.request.Request()Python是一种面向对象、直译式计算机程序设计语言,由荷兰人Guido van Rossum发明于1989年,1991年发行第一个公开发行版。它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块轻松地联结在一起。Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL协议。语法简洁清晰,特色之一是强制用空白符作为语句缩进。Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程。Python已经成为最受欢迎的程序设计语言之一。由于Python语言的简洁、易读以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python教授程序设计课程。例如麻省理工学院的计算机科学及编程导论课程就使用Python语言讲授。众多开源的科学计算软件包都提供了Python的调用接口,例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。2023-07-15 01:53:551
如何用Java实现URLEncode
用Java实现URLEncode的方法是引入java.net.URLEncoder包。java.net.URLDecoder.decode(String s,String enc);将application/x-www-form-urlencoded字符串转换成普通字符串。java.net.URLEncoder.decode(String s,String enc);将普通字符串转换成application/x-www-form-urlencoded字符串URLEncoder类包含将字符串转换为application/x-www-form-urlencoded MIME 格式的静态方法。web 设计者面临的众多难题之一便是怎样处理不同操作系统间的差异性。这些差异性能引起URL方面的问题:例如,一些操作系统允许文件名中含有空格符,有些又不允许。大多数操作系统不会认为文件名中含有符号“#”会有什么特殊含义;但是在一个URL中,符号“#”表示该文件名已经结束,后面会紧跟一个 fragment(部分)标识符。其他的特殊字符,非字母数字字符集,它们在URL或另一个操作系统上都有其特殊的含义,表述着相似的问题。为了解决这些问题,我们在URL中使用的字符就必须是一个ASCII字符集的固定字集中的元素,具体如下:1.大写字母A-Z2.小写字母a-z3.数字 0-94.标点符 - _ . ! ~ * " (和 ,)诸如字符: / & ? @ # ; $ + = 和 %也可以被使用,但是它们各有其特殊的用途,如果一个文件名包括了这些字符( / & ? @ # ; $ + = %),这些字符和所有其他字符就应该被编码。编码过程非常简单,任何字符只要不是ASCII码数字,字母,或者前面提到的标点符,它们都将被转换成字节形式,每个字节都写成这种形式:一个“%”后面跟着两位16进制的数值。空格是一个特殊情况,因为它们太平常了。它除了被编码成“%20”以外,还能编码为一个“+”。加号(+)本身被编码为%2B。当/ # = & 和?作为名字的一部分来使用时,而不是作为URL部分之间的分隔符来使用时,它们都应该被编码。WARNING这种策略在存在大量字符集的异构环境中效果不甚理想。例如:在U.S. Windows 系统中, é 被编码为 %E9. 在 U.S. Mac中被编码为%8E。这种不确定性的存在是现存的URI的一个明显的不足。所以在将来URI的规范当中应该通过国际资源标识符(IRIs)进行改善。2023-07-15 01:54:091
vb中怎么写URLEncode编码?
多谢楼下回答,解决大问题了。2023-07-15 01:54:193
iOS加密2——Base64(苹果支持)
1、由于某些系统中只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法。 Base64编码使用和urlencode比较 base64: 1、包含A-Z a-z 0-9 和加号“+”,斜杠“/” 用来作为开始的64个数字. 等号“=”用来作为后缀用途。 2、2进制的. 3、要比源数据多33%。 4、常用于邮件。 urlencode:将除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+) 请求参数传输使用base64,而不是使用urlencode,为什么? 1、部分因为base64编码后参数就不可读,而url编码英文部分是不变的 2、为了兼容网络上的一些很古老的设备, 这些古董设备只能识别 base64编码的字符 3、因为 urlencode 对二进制数据的效率不高,base64 会有效降低 %xx 的出现次数。 注释 : 1、url请求中,只对参数进行base64编码,不是对整个url进行base64编码。 2、在url请求时,会对url整体进行urlencode编码。 NSString *str = @"hello world"; NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding]; NSData *base64Data = [data base64EncodedDataWithOptions:0]; NSString *path = @"/Users/apple/Desktop/1.png"; NSData *data = [NSData dataWithContentsOfFile:path]; NSData *base64Data = [data base64EncodedDataWithOptions:0]; [base64Data writeToFile:@"/Users/apple/Desktop/base64" atomically:YES]; NSString *base64Str = [data base64EncodedStringWithOptions:0]; NSLog(@"base64Str: %@",base64Str); NSLog(@"%@ %ld base64Data: %@ %ld",data,data.length,base64Data,base64Data.length); NSData *endata = [[NSData alloc] initWithBase64EncodedData:base64Data options:0]; [endata writeToFile:@"/Users/apple/Desktop/123.png2" atomically:YES]; UIImage *image = [UIImage imageWithData:endata]; NSLog(@"%@",image); 和MD5一样我们采取封装的办法将base64封装进了MySecurities这个类中 MySecurities.h 文件 #import <Foundation/Foundation.h> @interface MySecurities : NSObject +(NSString *)base64EncodingWithData:(NSData *)sourceData;//base64加密 +(id)base64EncodingWithString:(NSString *)sourceString;//base64解密 @end base64加密 @implementation MySecurities +(NSString *)base64EncodingWithData:(NSData *)sourceData{ if (!sourceData) { //如果sourceData则返回nil,不进行加密。 return nil; } NSString *resultString = [sourceData base64EncodedStringWithOptions: NSDataBase64Encoding64CharacterLineLength]; return resultString; } ***base64解密*** +(id)base64EncodingWithString:(NSString *)sourceString{ if (!sourceString) { return nil;//如果sourceString则返回nil,不进行解密。 } NSData *resultData = [[NSData alloc]initWithBase64EncodedString:sourceString options:NSDataBase64DecodingIgnoreUnknownCharacters]; return resultData; } @end2023-07-15 01:54:261
百度、google等搜索引擎url编码问题。
分类: 电脑/网络 >> 程序设计 >> 其他编程语言 问题描述: 在百度中输入“测试”搜索,IE地址框中的URL代码为:baidu/s?cl=3&wd=%B2%E2%CA%D4可见“测试”的编码是“B2%E2%CA%D4”。 google等其他搜索引擎的URL的编码与百度都一样,“测试”两字的编码都是“B2%E2%CA%D4”。 请问,如果我要写程序,怎么实现把“测试”转换为“B2%E2%CA%D4”。其他关键字类同,谢谢! 解析: 在ASP中是这样实现的<% a=Server.UrlEncode("测试") response.write(a) %> 运行结果是:%B2%E2%CA%D4 其它语言也有类似函数 [Visual Basic] Overloads Public Function UrlEncode(String) As String [C#] public string UrlEncode(string); [C++] public: String* UrlEncode(String*); [JScript] public function UrlEncode(String) : String;2023-07-15 01:55:011
url的编码和解码方式
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(“中文-_. “).” ”; // -_.+ echo urldecode(“-_. “).” ”; //中文-_. echo rawurlencode(“中文-_. “).” ”; // -_. echo rawurldecode(“-_. “).” ”; //中文-_. ?> 除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。 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′)).” ”; echo rawurlencode(mb_convert_encoding($url, ‘utf-8′, ‘gb2312′)).” ”; //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/中文.rar2、示例 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=u1637 &ckn=91142321196129 2)gb2312解码 http://canvas.gdt.qq.com/canvas/1?viewid=针吠塑 浈uf8f5?&ckn=911423211961292023-07-15 01:55:081
Javascript的URL如何像C#中UrlEncode和UrlDecode一样使用?
这是javascript的函数.encodeURI("url地址")//编码decodeURI("url地址")//解码这是asp.net的方法.Server.UrlEncode("url地址")//编码Server.UrlDecode("url地址")//解码ps:可以用js编码.net解码.也就是它们编码解码方式是一样的.它们的返回值都是编码或解码后的URL字符串.2023-07-15 01:55:151
微信小程序怎么通过urlencode格式化请求体。
在传递端通过encodeURIComponent(url)进行编码在接收端通过decodeURIComponent进行解码2023-07-15 01:55:221
java中要将application/x-www-from-urlencode mime字符转为普通字符,使用哪个方法
用Java实现URLEncode的方法是引入java.net.URLEncoder包。java.net.URLDecoder.decode(String s,String enc);将application/x-www-form-urlencoded字符串转换成普通字符串。java.net.URLEncoder.decode(String s,String enc);将普通字符串转换成application/x-www-form-urlencoded字符串URLEncoder类包含将字符串转换为application/x-www-form-urlencoded MIME 格式的静态方法。web 设计者面临的众多难题之一便是怎样处理不同操作系统间的差异性。这些差异性能引起URL方面的问题:例如,一些操作系统允许文件名中含有空格符,有些又不允许。大多数操作系统不会认为文件名中含有符号“#”会有什么特殊含义;但是在一个URL中,符号“#”表示该文件名已经结束,后面会紧跟一个 fragment(部分)标识符。其他的特殊字符,非字母数字字符集,它们在URL或另一个操作系统上都有其特殊的含义,表述着相似的问题。为了解决这些问题,我们在URL中使用的字符就必须是一个ASCII字符集的固定字集中的元素,具体如下:1.大写字母A-Z2.小写字母a-z3.数字 0-94.标点符 - _ . ! ~ * " (和 ,)诸如字符: / & ? @ # ; $ + = 和 %也可以被使用,但是它们各有其特殊的用途,如果一个文件名包括了这些字符( / & ? @ # ; $ + = %),这些字符和所有其他字符就应该被编码。编码过程非常简单,任何字符只要不是ASCII码数字,字母,或者前面提到的标点符,它们都将被转换成字节形式,每个字节都写成这种形式:一个“%”后面跟着两位16进制的数值。空格是一个特殊情况,因为它们太平常了。它除了被编码成“%20”以外,还能编码为一个“+”。加号(+)本身被编码为%2B。当/ # = & 和?作为名字的一部分来使用时,而不是作为URL部分之间的分隔符来使用时,它们都应该被编码。WARNING这种策略在存在大量字符集的异构环境中效果不甚理想。例如:在U.S. Windows 系统中, é 被编码为 %E9. 在 U.S. Mac中被编码为%8E。这种不确定性的存在是现存的URI的一个明显的不足。所以在将来URI的规范当中应该通过国际资源标识符(IRIs)进行改善。2023-07-15 01:55:291