URL 如何编码解码?为什么要编码?
原因很简单,因为 URL 只能使用 ASCII 字符集来通过因特网进行发送, 不支持中文!!不支持中文!! 在浏览器中的 URL 所展现的样式包含有中文字符,但是当你将这行 URL 复制粘贴时你就会发现,实际上的内容和你所看到的是不一样的。 所以说 URL 编码只是针对非英文字母、阿拉伯数字和某些标点符号起作用的。 URL 编码的原则就是使用安全的字符(没有特殊用途或者特殊意义的可打印字符)去表示那些不安全的字符。 例如说我们有这样一条 URL : www.hahaha.com/你好?a=1&b=2 ,我们如何可以把它合法的在因特网中传播呢?? 使用 encodeURIComponent(str) 这个方法来将 utf-8 的字符编码为合法的 URL 。 上面的那条网址合法的传输形式为 window.encodeURIComponent('www.hahaha.com/你好?a=1&b=2') 。 想要解码的时候只需要使用 decodeURIComponent(str) 这个方法就可以解码你所得到的 URL 。 同样还是刚才的网址,我们得到解码后的网址为 www.hahaha.com%2F%E4%BD%A0%E5%A5%BD%3Fa%3D1%26b%3D2 ,我们想要得到一个可读性比较高的网址,只需要 decodeURIComponent('www.hahaha.com%2F%E4%BD%A0%E5%A5%BD%3Fa%3D1%26b%3D2') 。 如果哪天所有字符都可以在因特网内直接发送的话,可能就不需要在对 URL 进行编码和解码了......
url如何编码解码?为什么要编码?
一般来说,URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号,这是因为网络标准 RFC 1738 做了硬性规定。如果URL中有汉字,就必须编码后使用。但是麻烦的是,RFC 1738没有规定具体的编码方法,而是交给应用程序(浏览器)自己决定,这导致"URL编码"成为了一个混乱的领域。 四种导致混乱的情况: 网址路径中包含汉字 查询字符串包含汉字 Get方法生成的URL包含汉字 Ajax调用的URL包含汉字(在Ajax调用中,IE总是采用GB2312编码(操作系统的默认编码),而Firefox总是采用utf-8编码。) 综上所述,这个时候需要一种编码方法向服务器发送请求,而js则可以满足这一需求。 decodeURI() decodeURIComponent() encodeURI() encodeURIComponent() (一般使用encodeURI()和encodeURIComponent()) encodeURI()是Javascript中真正用来对URL编码的函数。它着眼于对整个URL进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号"; / ? : @ & = + $ , #",也不进行编码。编码后,它输出符号的utf-8形式,并且在每个字节前加上%。 它对应的解码函数是decodeURI() 与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。因此,"; / ? : @ & = + $ , #",这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码。至于具体的编码方法,两者是一样。 它对应的解码函数是decodeURIComponent()。 encodeURIComponent比encodeURI编码的范围更大。 举例来说,encodeURIComponent会把 http:// 编码成 http%3A%2F%2F 而encodeURI却不会。 如果你需要编码整个URL,然后需要使用这个URL,那么用encodeURI,否则使用encodeURIComponent。
在EXCEL 表格里面套用 URL转码 公式 如
要实现这个功能也不难:打开Excel,按ALT+F11,添加一个模块。插入下面代码,Public Function UrlEncode(ByRef szString As String) As String Dim szChar As String Dim szTemp As String Dim szCode As String Dim szHex As String Dim szBin As String Dim iCount1 As Integer Dim iCount2 As Integer Dim iStrLen1 As Integer Dim iStrLen2 As Integer Dim lResult As Long Dim lAscVal As Long szString = Trim$(szString) iStrLen1 = Len(szString) For iCount1 = 1 To iStrLen1 szChar = Mid$(szString, iCount1, 1) lAscVal = AscW(szChar) If lAscVal >= &H0 And lAscVal = &H30 And lAscVal = &H41 And lAscVal = &H61 And lAscVal <= &H7A) Then szCode = szCode & szChar Else szCode = szCode & "%" & Hex(AscW(szChar)) End If Else szHex = Hex(AscW(szChar)) iStrLen2 = Len(szHex) For iCount2 = 1 To iStrLen2 szChar = Mid$(szHex, iCount2, 1) Select Case szChar Case Is = "0" szBin = szBin & "0000" Case Is = "1" szBin = szBin & "0001" Case Is = "2" szBin = szBin & "0010" Case Is = "3" szBin = szBin & "0011" Case Is = "4" szBin = szBin & "0100" Case Is = "5" szBin = szBin & "0101" Case Is = "6" szBin = szBin & "0110" Case Is = "7" szBin = szBin & "0111" Case Is = "8" szBin = szBin & "1000" Case Is = "9" szBin = szBin & "1001" Case Is = "A" szBin = szBin & "1010" Case Is = "B" szBin = szBin & "1011" Case Is = "C" szBin = szBin & "1100" Case Is = "D" szBin = szBin & "1101" Case Is = "E" szBin = szBin & "1110" Case Is = "F" szBin = szBin & "1111" Case Else End Select Next iCount2 szTemp = "1110" & Left$(szBin, 4) & "10" & Mid$(szBin, 5, 6) & "10" & Right$(szBin, 6) For iCount2 = 1 To 24 If Mid$(szTemp, iCount2, 1) = "1" Then lResult = lResult + 1 * 2 ^ (24 - iCount2) Else: lResult = lResult + 0 * 2 ^ (24 - iCount2) End If Next iCount2 szTemp = Hex(lResult) szCode = szCode & "%" & Left$(szTemp, 2) & "%" & Mid$(szTemp, 3, 2) & "%" & Right$(szTemp, 2) End If szBin = vbNullString lResult = 0 Next iCount1 UrlEncode = szCodeEnd Function然后关闭VBE窗口。回到Excel中。在C3单元格输入:=UrlEncode(B3)即可得到结果