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
分享到:
相关推荐
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共享一个ID,这将使URL更短。 已编写base62程序以将文件编码/解码为这种格式。 语法类似于流行的base64命令行程序。 软件包内部有一个有效的base62算法的c ++版本。 货源在包装内。 请...
通过URLEncoder.encode加密地址栏url上得中文字符, 并可通过java.net.URLDecoder.decode(str, charset)解密中文
在完成基本要求(MFC编程基础)后实现了十种编码解码(base64encode、base64encode、char2hex、hex2char、URLencode、URLdecode、UTF8 2 Unicode、Unicode 2 UTF8、曼彻斯特、差分曼彻斯特),和八种加解密(DES加...
//编码 $returnUrl = parse_str(base64_decode($returnUrl));//解码 或者 $returnUrl = base64_decode($returnUrl);//解码 //或者 //不知道为何, 上面第一种解码方式返回的是null, 求解 $returnUrl = base64_encode...
例如,当生成url安全时,这很有用。 安装 用安装。 $ composer require tuupola/base62 该分支需要PHP 7.1或更高版本。 较早的1.x分支还支持PHP 5.6和7.0。 $ composer require " tuupola/base62:^1.0 " 用法 该...
Base64编码/解码URL的十六进制字符串(模块和二进制工具) 安装: npm install -g hex64 命令行: $ hex64 b64 cccccc zMzM $ hex64 hex zMzM cccccc $ hex64 cccccc b64: zMzM $ hex64 zMzM hex: cccccc $ hex64 ...
在对新的URL编码的时候发现,网页编码的格式对于JS的影响很大,在这里书写一点。 {var B=siteUrl+this.actionUrl+(this.type===”all”?””:this.type)+”&SearchWord=”+encodeURIComponent(A).replace(/’/g,”'...
Ascii 编码,Base64、Base 系列编码,Escape 编码,Hex 编码, Html entity 编码,莫尔斯电码,Quoted-printable(可打印字符引用编码),Shellcode 编码,Sql 编码,Tap Code(敲击码),Unicode 编码,Url 编码;...
URL编码 urlEncode URL解码 urlDecode Base64编码 base64Encode base64Encode2String Base64解码 base64Decode Base64URL安全编码 base64UrlSafeEncode Html编码 htmlEncode Html解码 htmlDecode 加密解密相关→...
在PHP的语法环境里,有urlencode与urldecode,base64_encode和base64_decode自带的对称算法,不过这些自带的算法不能称之为加密算法,只能说是编码方式而已。可是我们可以利用这些来进行一些加工,来实现简单的加密和...
在PHP的语法环境里,有urlencode与urldecode,base64_encode和base64_decode自带的对称算法,不过这些自带的算法不能称之为加密算法,只能说是编码方式而已。可是我们可以利用这些来进行一些加工,来实现简单的加密和...
crypt_decode() Crypt解密 check_param() 检测提交参数是否正确 halt() 终止提示 error() 提示错误 alert() 小提示 getRandName 获取随机文件名 arrayCallBack 数组回调 jsonEncode json编码(支持GBK) json...