为了进一步的强化用户体验,跟网民搞好关系,本屌丝想实现一个功能,想通过判断用户是用哪个搜索词进入我的网站的,通过这样判断可以直接让用户直接了解想看到的东西。最后一不小心成功了,在这里写一写得瑟一下。
先来看一段PHP的源码,之后咱们再来分析:
<?php
function search_word_from()
{
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
if(strstr($referer, 'baidu.com'))
{
// 百度
preg_match('/baidu.+wo?r?d=([^\\&]*)/is', $referer, $tmp);
$keyword = urldecode($tmp[1]);
$from = 'baidu';
}
elseif (strstr($referer, 'google.com') or strstr($referer, 'google.cn'))
{
// 谷歌
preg_match('/google.+q=([^\\&]*)/is', $referer, $tmp);
$keyword = urldecode( $tmp[1] );
$from = 'google';
}
elseif (strstr($referer, 'so.com'))
{
// 360搜索
preg_match('/so.+q=([^\\&]*)/is', $referer, $tmp);
$keyword = urldecode($tmp[1]);
$from = '360';
}
elseif (strstr($referer, 'sogou.com'))
{
// 搜狗
preg_match('/sogou.com.+query=([^\\&]*)/is', $referer, $tmp);
$keyword = urldecode($tmp[1]);
$from = 'sogou';
}
elseif (strstr($referer, 'soso.com'))
{
// 搜搜
preg_match('/soso.com.+w=([^\\&]*)/is', $referer, $tmp);
$keyword = urldecode($tmp[1]);
$from = 'soso';
}
else
{
$keyword ='';
$from = '';
}
return array('keyword' => $keyword, 'from' => $from);
}
// 以下为测试
// 在搜索引擎搜索个关键词,进入网站
$word = search_word_from();
if(!empty($word['keyword']))
{
printf('关键字:%s 来自:%s', $word['keyword'], $word['from']);
}
?>
下面我们通过JS来简单说明下原理
第一步
需要知道从哪个地址来的,这可用document对象的referrer属性来解决。用法如下:
alert(document.referrer);
第二步
知道从哪来的了,需要查找这个网址里面是否含有某个关键词,这时候需要用到javascript种的indexOf()方法
stringObject.indexOf(searchvalue,fromindex)
参数
描述
searchvalue
必需。需要查找的关键字。
fromindex
可选的整数参数。从哪个位置开始查找。
详细内容可暂时移步:
http://www.w3school.com.cn/js/jsref_indexOf.asp这样的话,就可以达到目的了,先知道从哪个网址来的,然后就判断这个网址有没有关键词就行了。
需要注意的是url已经编码了,例如如果从百度搜索“乱炖web”进入我的网站的话,我获取到的是这个网址:
http://www.baidu.com/s?wd=%E4%B9%B1%E7%82%96web&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&rsv_sug3=11&rsv_sug=0&rsv_sug1=9&rsv_sug4=270注意红字的部分是“乱炖web”但是因为不认识中文所以给编码了,那么我们查找的时候也需要编码一下。
咱们再深入继续研究关键词看看
判断用户是通过什么关键词进入网站的
例如如果我们想判断是否从“乱炖web”这个关键词来的,我们先把“乱炖web”给编码了(编码方法可以百度搜索“url编码”),得到这串东西“%E4%B9%B1%E7%82%96web”,然后我们就来判断,是否从“乱炖web”这个关键词来的,js代码如下:
alert(document.referrer.indexOf("%E4%B9%B1%E7%82%96web"))
运行结果:如果不是从“乱炖web”来的,会弹出“-1”,如果是就返回“乱炖web”这个关键词所在的位置。
这样是不是就ok了?
NO。。。。。
假如你先搜索过“乱炖web”,再从这个结果上搜索“正则表达式”,你看看变态的百度地址成啥样了:
http://www.baidu.com/s?tn=baiduhome_pg&ie=utf-8&bs=%E4%B9%B1%E7%82%96-web+%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F&f=8&rsv_bp=1&rsv_spt=1&wd=%E4%B9%B1%E7%82%96web+%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F&rsv_sug3=2&rsv_sug=1&rsv_sug1=2&rsv_sug4=55&inputT=258….
有点乱,截图算了。
看到了吧,虽然是搜索的“正则表达式”进入到的网站,但是网址里面含有的“乱炖web”。
这样的话就用到了indexOf()的第二个参数,起始位置,先搜索”wd=”的位置,然后从“wd=”开始查找。具体代码如下:
alert(document.referrer.indexOf("%E4%B9%B1%E7%82%96web",document.referrer.indexOf("wd=")))
这样的话就搞定了。。。。
原文链接:
http://levi.cg.am/?p=3252来自
http://www.douban.com/note/325698389/js获取搜索引擎关键词
<script>
//获取url的特定参数
function getQueryStringRegExp(name,url)
{
var reg = new RegExp("(^|\\?|&)"+ name +"=([^&]*)(\\s|&|$)", "i");
if (reg.test(url)) return unescape(RegExp.$2.replace(/\+/g, " ")); return "";
}
var referrer= '
http://www.baidu.com/s?wd=%D3%CE%CF%B7%D7%CA%D1%B6&rsv_bp=0&rsv_spt=3&inputT=3148'; //baidu
//var referrer= '
http://www.soso.com/q?pid=s.idx&cid=s.idx.se&w=abcdefg'; //soso
//var referrer= '
http://www.sogou.com/web?query=abcdefg&_asf=www.sogou.com&_ast=1330407555&w=01019900&p=40040100&sut=...'; //sogou
//var referrer= '
http://www.youdao.com/search?q=abcdefg&ue=utf8&keyfrom=web.index'; //youdao
//var referrer= '
http://cn.bing.com/search?q=abcdefg&go=&qs=n&form=QBLH&pq=abcdefg&sc=8-7&sp=-1&sk='; //bing
//var referrer='
http://www.google.com.hk/#hl=zh-CN&newwindow=1&safe=strict&site=&q=web515+%E6%B8%B8%E6%88%8F&oq=web5...'; //google
var referrer = document.referrer;
if (!referrer) {
try {
if (window.opener) {
// IE下如果跨域则抛出权限异常
// Safari和Chrome下window.opener.location没有任何属性
referrer = window.opener.location.href;
}
}
catch (e) {}
}
if(referrer){
var rf_domain = referrer.split('/')[2];
}else{
var rf_domain = '';
}
var domain = document.domain;
//document.write(referrer);
//document.write("<br />");
//document.write("来源页面域名 : " + rf_domain);
//document.write("<br />");
//document.write("本页面域名 : "+domain);
//document.write("<hr />");
document.write("<hr />");
//document.write("本页面域名 : "+referrer);
if(rf_domain == ''){
document.write("直接访问");
var key = '';
}else if(rf_domain == domain){
document.write("本域名链接来源本域名");
var key = '';
}else if(rf_domain == "
www.baidu.com"){
document.write("本域名链接来源百度");
var key = getQueryStringRegExp("wd",referrer);
//document.write(key);
}else if(rf_domain == "
www.soso.com"){
document.write("本域名链接来源搜搜");
var key = getQueryStringRegExp("w",referrer);
}else if(rf_domain == "
www.sogou.com"){
document.write("本域名链接来源搜狗");
var key = getQueryStringRegExp("query",referrer);
}else if(rf_domain == "
www.youdao.com"){
document.write("本域名链接来源有道");
var key = getQueryStringRegExp("q",referrer);
}else if(rf_domain == "
www.youdao.com"){
document.write("本域名链接来源bing");
var key = getQueryStringRegExp("q",referrer);
}else if(rf_domain == "
www.google.com.hk"){
document.write("本域名链接来源谷歌");
var key = getQueryStringRegExp("q",referrer);
}
</script>
来自
http://blog.ddian.cn/post-977.html比如说:在百度中 输入 “视频” 然后地址:http://www.baidu.com/s?wd=%CA%D3%C6%B5现在我如何通过javascript 读取 wd=%CA%D3%C6%B5让返回的值为 视频谢谢大家的帮助啊
<
script
type
=
"text/vbscript"
>
</
script
>
<
script
type
=
"text/javascript"
>
</
script
>
</
head
>
<
body
>
<
a
href
=
"?wd=%CA%D3%C6%B5"
>ddd</
a
>
</
body
>