2012-01-15 56 views
0

现在Google的网址结构有所不同。所以从它们中提取引用关键字更困难。这里有一个例子:从引荐来源网址中提取关键字

http://www.google.co.uk/search?q=jquery+post+output+46&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a#pq=jquery+post+output+46&hl=en&cp=30&gs_id=1v&xhr=t&q=jquery+post+output+php+not+running&pf=p&sclient=psy-ab&client=firefox-a&hs=8N5&rls=org.mozilla:en-US%3Aofficial&source=hp&pbx=1&oq=jquery+post+output+php+not+run&aq=0w&aqi=q-w1&aql=&gs_sm=&gs_upl=&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=bdeb326aa44b07c5&biw=1280&bih=875

我进行搜索竟是“jQuery的岗位输出PHP没有运行”,所以第一个“q =”不包含完整的搜索。第二个是。我想写一个总是提取最后'q ='的脚本,但我不确定Google的URL是否总是最后一次搜索完整。任何人都有这方面的经验。

回答

3

可以使用parse_url()parse_str()做到这一点,并urldecode(),其中$str是指字符串:

$fragment = parse_url($str, PHP_URL_FRAGMENT); 
parse_str($fragment, $arr); 

$query = urldecode($arr['q']); // jquery post output php not running 
+0

谢谢!但我正在努力弄清楚这是如何工作的。当我print_r $ arr时,它看起来好像只有一个'q'变量,即使在URL中显然是2.你的代码是否以某种方式结合了'q'部分?一个解释将帮助我学习更多。 – 2012-01-15 19:11:35

+0

@LucasScholten:'parse_url'中的第二个参数只提取URL中的哈希标记('#')后面的内容,因此只会有一个“q”。 – 2012-01-15 19:33:41

+0

在这种情况下,我已经在脚本 '如果(strpos($ _ POST [ '引荐'], “#”)> 0) { \t $片段= parse_url($ _ POST ['引荐的顶部添加了此'],PHP_URL_FRAGMENT); } else { \t $ fragment = parse_url($ _ POST ['referrer'],PHP_URL_QUERY); }' 由于并非所有的Google网址都是分片 – 2012-01-15 19:49:35