URL编码表一览
æ 退格 TAB 换行 回车 空格 ! " # $ % & ' ( ) * + , - . / | %00 %01 %02 %03 %04 %05 %06 %07 %08 %09 %0a %0b %0c %0d %0e %0f %10 %11 %12 %13 %14 %15 %16 %17 %18 %19 %1a %1b %1c %1d %1e %1f %20 %21 %22 %23 %24 %25 %26 %27 %28 %29 %2a %2b %2c %2d %2e %2f | 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ | %30 %31 %32 %33 %34 %35 %36 %37 %38 %39 %3a %3b %3c %3d %3e %3f %40 %41 %42 %43 %44 %45 %46 %47 %48 %49 %4a %4b %4c %4d %4e %4f %50 %51 %52 %53 %54 %55 %56 %57 %58 %59 %5a %5b %5c %5d %5e %5f | ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ € ‚ ƒ „ 乧 侕 侖 ˆ 侎 Š ‹ Œ 丒br> | %60 %61 %62 %63 %64 %65 %66 %67 %68 %69 %6a %6b %6c %6d %6e %6f %70 %71 %72 %73 %74 %75 %76 %77 %78 %79 %7a %7b %7c %7d %7e %7f %80 %81 %82 %83 %84 %85 %86 %87 %88 %89 %8a %8b %8c %8d %8e %8f | 乪 乫 乬 乭 • – — ˜ ™ š › œ 丒br>Ÿ ¡ ¢ £ \ | 仒 丯 © ª « ¬ ¯ ® ¯ 亱 亇 ² ³ 丩 µ 侘 · ¸ ¹ º » ¼ ½ ¾ ¿ | %90 %91 %92 %93 %94 %95 %96 %97 %98 %99 %9a %9b %9c %9d %9e %9f %a0 %a1 %a2 %a3 %a4 %a5 %a6 %a7 %a8 %a9 %aa %ab %ac %ad %ae %af %b0 %b1 %b2 %b3 %b4 %b5 %b6 %b7 %b8 %b9 %ba %bb %bc %bd %be %bf | À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï | %c0 %c1 %c2 %c3 %c4 %c5 %c6 %c7 %c8 %c9 %ca %cb %cc %cd %ce %cf %d0 %d1 %d2 %d3 %d4 %d5 %d6 %d7 %d8 %d9 %da %db %dc %dd %de %df %e0 %e1 %e2 %e3 %e4 %e5 %e6 %e7 %e8 %e9 %ea %eb %ec %ed %ee %ef | ð ñ ò ó ô õ ö 亐 ø ù ú û ü ý þ ÿ | %f0 %f1 %f2 %f3 %f4 %f5 %f6 %f7 %f8 %f9 %fa %fb %fc %fd %fe |
以下8个特殊字符URL编码没有对其进行转码 | 十六进制值 | ||
1. | + | URL 中+号表示空格 | %2B |
2. | 空格 | URL中的空格可以用+号或者编码 | %20 |
3. | / | 分隔目录和子目录 | %2F |
4. | ? | 分隔实际的 URL 和参数 | %3F |
5. | % | 指定特殊字符 | %25 |
6. | # | 表示书签 | %23 |
7. | & | URL 中指定的参数间的分隔符 | %26 |
8. | = | URL 中指定参数的值 | %3D |
URL转码方法 var str = encodeURI(str);(此方法为JavaScript的)
<SCRIPT LANGUAGE="JavaScript">
<!--
var str = "1一aA";
alert(encodeURI(str));
//-->
</SCRIPT>
备注:
python:
#!/usr/bin/python # -*- coding: UTF-8 -*- import hashlib import collections import urllib def md5(ss): m = hashlib.md5() m.update(ss) return m.hexdigest() params = collections.OrderedDict() a = "test 1" # a = a.replace(" ", "") # 不去掉空格 params['reg'] = a pstr = '' for key, val in params.items(): pstr += key + "=" + str(val) print pstr pstr = urllib.quote(pstr.encode('utf-8')) print pstr sign = md5(pstr) print sign
输出:
reg=test 1
reg%3Dtest%201
ba22339e5c14a5ed05592474648983b2
java:
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.MessageDigest;
public class Md5Util {
private static MessageDigest md5 = null;
static {
try {
md5 = MessageDigest.getInstance("MD5");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
/**
* 用于获取一个String的md5值
*
* @param string
* @return
*/
public static String getMd5(String str) {
byte[] bs = md5.digest(str.getBytes());
StringBuilder sb = new StringBuilder(40);
for (byte x : bs) {
if ((x & 0xff) >> 4 == 0) {
sb.append("0").append(Integer.toHexString(x & 0xff));
} else {
sb.append(Integer.toHexString(x & 0xff));
}
}
return sb.toString();
}
public static void main(String[] args) throws UnsupportedEncodingException {
StringBuilder sb = new StringBuilder();
String a = "test 1";
// a = a.replace(" ", ""); // 不去掉空格
sb.append("reg=").append(a);
System.out.println(sb);
String encoded = URLEncoder.encode(sb.toString(), "UTF-8");
System.out.println(encoded);
String md5Sign = getMd5(encoded);
System.out.println(md5Sign);
}
}
输出:
reg=test 1
reg%3Dtest+1
9c4ba428cc77a7aa00bbcffab108823d
url里面URL编码没有对空格其进行转码,所有造成了请求的参数不一致,md5更加不一致。
解决办法:
1.replace去掉空格(把注释去掉),或者替换为别的字符。
输出为:
python:
reg=test1
reg%3Dtest1
5320493f76fe3c392b8d7b2866da1948
java:
reg=test1
reg%3Dtest1
5320493f76fe3c392b8d7b2866da1948
字符正常了。所以用url传输数据时候,需要把那8个+、空格、/、?、%、#、&、=在python和java中replace替换掉,以保证encode一致,如果需要MD5的sign验证的,需要注意这几个字符。
python