【发布时间】:2011-07-02 10:40:22
【问题描述】:
我正在创建一个搜索网站,用户可以在其中找到我的桌子的东西。
搜索效果很好,但我希望能够允许用户使用 Google 或 Bing 结果进行搜索。我希望人们通过在查询后指示 / 来确定他们想要使用特定的搜索引擎。
例如,搜索 something /google 会将搜索发送到 Google。必应也是如此。
【问题讨论】:
-
这是相当广泛的。你的问题到底是什么?
我正在创建一个搜索网站,用户可以在其中找到我的桌子的东西。
搜索效果很好,但我希望能够允许用户使用 Google 或 Bing 结果进行搜索。我希望人们通过在查询后指示 / 来确定他们想要使用特定的搜索引擎。
例如,搜索 something /google 会将搜索发送到 Google。必应也是如此。
【问题讨论】:
您可以使用正则表达式来提取查询字符串的这些部分。例如
preg_match_all('(?=^|\s)/[a-z]+\b', $query, $matches)
将从您的查询中提取所有以斜杠开头并后跟一个或多个字母的标记。然后,您可以通读这些令牌并决定对每个令牌采取什么行动。
这个正则表达式解决方案很健壮,因为它应该允许这些(空格分隔的)标记出现在查询字符串中的任何位置,甚至可以在查询字符串中包含多个标记。
您可能还想使用preg_replace(...) 从查询中去除这些标记,以便您可以处理其余的搜索文本。
【讨论】:
使用 preg_match 检查搜索字符串的最后一部分是否为/search_engine。
如果存在则将它们重定向到
http://www.google.com/search?q=site%3Adomain.com+search+string
【讨论】:
如果您正在寻找 Google 和 Bing,或者少数搜索引擎,您可以尝试:
if (strpos('/google',$_GET['q']) !== false) {
header('Location: http://www.google.com/q='.str_replace('/google','',$q).'+site:example.com');
exit;
} else if (strpos('/bing',$_GET['q']) !== false) {
header('Location: http://www.bing.com/search?q='.str_replace('/bing','',$q).'+site:example.com');
exit;
}
注意,您需要在任何文本输出到 PHP 的输出缓冲区之前将其添加到您的页面(由于 header() 函数调用)。这意味着,在 PHP 被指示向页面写入任何内容之前。否则,您的 PHP 页面会出现错误。
【讨论】: