`
381895649
  • 浏览: 230328 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

百度搜索url编码解密(url encode decode)

 
阅读更多

 

oyhk 学习笔记

 

 

本文章来自:百度搜索url编码解密(url encode decode)

 

 

前天在公司做了关于搜索引擎的referer的取值遇到了问题,其实我们想做什么样的需求呢?

需求是这样的,首先我们在搜索引擎,输入关键字去搜索,例如我们输入向日葵保险网(公司网站....),点击进去一个搜索页面后,获取referer然后把关键字获取出来,做关键字显示

首先我拿google搜索引擎来做对比

看图

 

好了,我点击了搜索,我把url复制出来

https://www.google.com.hk/#hl=zhCN&newwindow=1&safe=strict&tbo=d&site=&source=hp

&q=%E5%90%91%E6%97%A5%E8%91%B5%E4%BF%9D%E9%99%A9%E7%BD%91

&oq=%E5%90%91%E6%97%A5%E8%91%B5

&gs_l=hp.12.5.0l10.199955.203689.0.639888.14.11.0.1.1.1.637.1823.3-1j2j1.4.0...0.0...1c.1j4.pwpaW-tzR4A&bav=on.2,or.r_gc.r_pw.

&bvm=bv.1355534169,d.aGc&fp=f6cf8da68332396&bpcl=40096503&biw=1551&bih=853

看到加了蓝色的那断吗?q=....,好,现在我去用java代码去decode

看下面代码

 

 

@Test
	public void testEncode() throws UnsupportedEncodingException {
		// 从google拿出来的关键字
		String googleUrl = "%E5%90%91%E6%97%A5%E8%91%B5%E4%BF%9D%E9%99%A9%E7%BD%91";
		System.out.println(URLDecoder.decode(googleUrl, "utf8"));
	}

 

 这段代码输出结果:

 

向日葵保险网

 

 那么证明,google搜索时,是用utf8去做编码

 

 

好了,这次我拿百度的搜索引擎去做了,步骤是这样的,看图

 

我点击,百度一下,我们看下面url

http://www.baidu.com/s?wd=%CF%F2%C8%D5%BF%FB%B1%A3%CF%D5%CD%F8

&rsv_bp=0&rsv_spt=3&rsv_sug3=1&rsv_sug1=1&rsv_sug4=104&oq=%CF%F2%C8%D5&rsp=1

&f=3&rsv_sug5=0&inputT=6358

看到了蓝色的wd=....,嗯 我再拿去decode,看代码

 

@Test
	public void testEncode() throws UnsupportedEncodingException {
		// 从google拿出来的关键字
		String googleUrl = "%E5%90%91%E6%97%A5%E8%91%B5%E4%BF%9D%E9%99%A9%E7%BD%91";
		System.out.println(URLDecoder.decode(googleUrl, "utf8"));
		// 从百度拿出来的关键字,看到上面吗?明显不一样了,还是看结果吧
		String baiURL = "%CF%F2%C8%D5%BF%FB%B1%A3%CF%D5%CD%F8";
		// 首先decode utf8明显出现乱码了
		System.out.println(URLDecoder.decode(baiURL, "utf8"));
		// 然后decode gbk,看结果
		System.out.println(URLDecoder.decode(baiURL, "gbk"));
	}

 

 下面结果

 

向日葵保险网
���տ����� 我是百度第一次搜索,关键字的decode utf8(乱码啦)
向日葵保险网 我是百度第一次搜索,关键字的decode gbk(正常)

 

 那么就已经非常明显了,百度第一次搜索关键字是gbk encode编码..第二次,看图

 

再把url拿出来...

http://www.baidu.com/s?ie=utf-8&bs=%E5%90%91%E6%97%A5%E8%91%B5%E4%BF%9D%E9%99%A9%E7%BD%91

&f=8&rsv_bp=1&rsv_spt=3

&wd=%E5%90%91%E6%97%A5%E8%91%B5%E4%BF%9D%E9%99%A9%E7%BD%91&inputT=0

明显吧,跟上面的url对比已经不一样了,好吧,再去decode看看吧,看代码

 

@Test
	public void testEncode() throws UnsupportedEncodingException {
		// 从google拿出来的关键字
		String googleUrl = "%E5%90%91%E6%97%A5%E8%91%B5%E4%BF%9D%E9%99%A9%E7%BD%91";
		System.out.println(URLDecoder.decode(googleUrl, "utf8"));
		// 从百度拿出来的关键字,看到上面吗?明显不一样了,还是看结果吧
		String baiduURL1 = "%CF%F2%C8%D5%BF%FB%B1%A3%CF%D5%CD%F8";
		// 首先decode utf8明显出现乱码了
		System.out.println(URLDecoder.decode(baiduURL1, "utf8") + " 我是百度第一次搜索,关键字的decode utf8(乱码啦)");
		// 然后decode gbk,看结果
		System.out.println(URLDecoder.decode(baiduURL1, "gbk") + " 我是百度第一次搜索,关键字的decode gbk(正常)");
		// 下面是点击第二次的百度搜索url
		String baiduURL2 = "%E5%90%91%E6%97%A5%E8%91%B5%E4%BF%9D%E9%99%A9%E7%BD%91";
		System.out.println(URLDecoder.decode(baiduURL2, "utf8") + " 我是百度第二次搜索,关键字的decode utf8(正常)");
		System.out.println(URLDecoder.decode(baiduURL2, "gbk") + " 我是百度第二次搜索,关键字的decode gbk(乱码)");
	}

 结果

 

向日葵保险网
���տ����� 我是百度第一次搜索,关键字的decode utf8(乱码啦)
向日葵保险网 我是百度第一次搜索,关键字的decode gbk(正常)
向日葵保险网 我是百度第二次搜索,关键字的decode utf8(正常)
鍚戞棩钁典繚闄╃綉 我是百度第二次搜索,关键字的decode gbk(乱码)

 看到结果了吧....看到百度搜索时的规则第一次是gbk,第二次以后是utf8,那当我们做需求是要获取百度referer时,我们就会遇到问题了,什么问题?

当然是,我们很难判断百度搜索关键字时是什么编码...导致referer乱码..

如果你用js去获取referer,值是有但是你想显示出来,肯定就会出错了,为什么呢?用js去显示出来,肯定就是用js decodeURI方法去做,那么百度第一次已经encode 编码为gbk,那么js decodeURI 就会解释不到,由于js 默认decodeURI是utf8...

现在我还在找解决方法,那位高手有方法可以解决js decodeURI gbk?

  • 大小: 44.7 KB
  • 大小: 49.6 KB
  • 大小: 115 KB
分享到:
评论
2 楼 niqingyang 2018-05-08  
https://www.cnblogs.com/xueduanyang/archive/2013/05/30/3108442.html
1 楼 niqingyang 2018-05-08  
function urldecode(str, charset, callback) {
            window._urlDecodeFn_ = callback;
            var script = document.createElement('script');
            script.id = '_urlDecodeFn_';
            var src = 'data:text/javascript;charset=' + charset + ',_urlDecodeFn_("' + str + '");'
            src += 'document.getElementById("_urlDecodeFn_").parentNode.removeChild(document.getElementById("_urlDecodeFn_"));';
            script.src = src;
            document.body.appendChild(script);
        }

相关推荐

    encode加密解密.rar

    常见的encode加密方式有Base64、URL编码、Hex编码等,它们各自有其独特的应用场景和加密特性。 二、常见encode加密类型 1. Base64编码:Base64是一种将任意二进制数据转化为可打印字符的编码方式,广泛应用于电子...

    urlcode解码-HTTP:URL编码解码

    在Java中,可以使用`java.net.URLEncoder.encode()`和`java.net.URLDecoder.decode()`方法。 在处理网页表单提交或构建动态链接时,URL编码尤其重要。当用户输入的数据包含特殊字符时,为了防止数据丢失或误解,...

    URL参数加密解密(java版)

    - 即使是Base64编码后的字符串,也可能包含URL非法字符,需要使用`java.net.URLEncoder.encode()`和`java.net.URLDecoder.decode()`进行URL编码和解码。 5. **示例代码**: ```java import javax.crypto.Cipher;...

    Java实现url加密处理的方法示例

    6. **URL安全编码**:加密后的URL还应进行URL编码,以确保它们是URL安全的。在Java中,可以使用`java.net.URLEncoder.encode()`方法对加密字符串进行编码,解码则使用`java.net.URLDecoder.decode()`。 7. **异常...

    SQLServer CLR实现Unicode URL 加解密,MD5不同编码加密

    Select dbo.UrlDecode('CSDN%E4%B8%93%E4%B8%9A%E5%BC%80%E5%8F%91%E8%80%85%E7%A4%BE%E5%8C%BA') Select dbo.MD5Encrpty('CSDN专业开发者社区', '') --默认uft8 Select dbo.MD5Encrpty('CSDN专业开发者社区', 'GB...

    百度移动版的url编码解码示例

    在本示例中,我们看到的是一个关于百度移动版URL编码解码的JavaScript实现。 首先,我们来分析`decode`函数,它负责解码已经编码的URL字符串: 1. `decodeURIComponent(m)`:这是JavaScript提供的内置函数,尝试对...

    php实现URL加密解密的方法

    这两个函数分别用于加密和解密URL中的参数。 1. `query_encode` 函数: - 首先,它检查输入的字符串 `$sQuery` 是否为空。如果为空,则返回空字符串。 - 接着,使用正则表达式将所有的`&`字符替换为`&`,以符合...

    Base62 Encode/Decode Utility:用于对base62进行编码/解码的工具-开源

    例如,如果我想使用一个URL共享一个ID,这将使URL更短。 已编写base62程序以将文件编码/解码为这种格式。 语法类似于流行的base64命令行程序。 软件包内部有一个有效的base62算法的c ++版本。 货源在包装内。 请...

    PHP 加密解密和解决URL传输问题

    PHP的`urlencode`和`urldecode`函数可以实现URL编码和解码。然而,加密后的数据可能会包含非ASCII字符,这时我们需要先对加密结果进行Base64编码,因为Base64编码后的结果只包含可打印的ASCII字符。PHP的`base64_...

    Encode_Decode:编码和解码数据

    在PHP中,数据编码通常涉及到字符集转换,比如将ASCII转换为UTF-8,或者在URL中使用percent-encoding(也称为URL编码)。例如,`urlencode()`函数可以用来编码URL的一部分,确保它们在Web请求中是安全的。解码则对应...

    PHP url 加密解密函数代码

    在第一个例子中,`base64_encode()`函数用于将字符串`$returnUrl`编码为Base64格式,然后`rawurlencode()`函数将Base64编码后的字符串中的特殊字符进行URL编码,使其适用于放在URL中。在解码时,先使用`base64_...

    各种格式的编码解码工具类分享(hex解码 base64编码)

    `EncodeUtils`的`urlEncode`和`urlDecode`方法分别实现了URL编码和解码,其中默认编码方式为UTF-8。 ```java public static String urlEncode(String input) { try { return URLEncoder.encode(input, DEFAULT_...

    Base36加解密模块源码

    在`Base36`加解密模块中,主要包含两个核心功能:`encode`和`decode`。编码过程是将十进制数字转换为Base36的字符串,而解码则是相反的过程,将Base36字符串解析回原始的十进制数值。 编码(Encode): 1. 对输入的...

    url中文字符解码

    通过URLEncoder.encode加密地址栏url上得中文字符, 并可通过java.net.URLDecoder.decode(str, charset)解密中文

    一、数据采集常用工具安装配置使用.docx

    使用Encode-Decode Tools非常简单,只需要把URL编码的数据复制到这个软件的文本框中即可完成解密操作。此外,这个工具还可以使用中文字符、URL、网页代码等进行数据字符加密操作等等。 Fiddler2 Fiddler2是一个...

    EX_SDI.zip

    在完成基本要求(MFC编程基础)后实现了十种编码解码(base64encode、base64encode、char2hex、hex2char、URLencode、URLdecode、UTF8 2 Unicode、Unicode 2 UTF8、曼彻斯特、差分曼彻斯特),和八种加解密(DES加...

    PHP+JS Base64和URI编码解码

    首先,定义了一个包含中文字符的字符串,然后用`base64_encode()`进行编码,输出编码后的结果,再通过`base64_decode()`解码回原始数据。 如果`demo.php`文件还涉及到URI编码,那么可能会有类似以下的代码: ```...

    php中url加密

    首先,使用`base64_decode()`函数将Base64编码的字符解码回其原始形式,然后使用密钥中相应位置的字符与之进行数值上的加法运算(注意,由于加密时进行了减法,解密时需进行加法),最后通过`chr()`函数转换为原始...

Global site tag (gtag.js) - Google Analytics