【问题标题】:Keyword Extractor for Query Strings查询字符串的关键字提取器
【发布时间】:2010-12-01 18:58:23
【问题描述】:

我找到了一些查询字符串的关键字提取器,但它们似乎都已过时(使用不推荐使用的代码或根本不起作用)。

有谁知道 php 查询字符串提取器。或者我将如何构建一个函数,该函数采用“amazon.com”之类的“主机”和多个查询参数的名称并返回这些参数的值?

例如,http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=a+tale+of+two+cities&x=0&y=0

如果我提供了“amazon.com”和“field-keywords”,我如何获得数组:['a','tale','of','two','cities']

提前致谢!!

澄清

Jose 的回答涵盖了我的亚马逊示例,但似乎不适用于任何其他 URL:

http://www.bing.com/search?q=Christmas+Around+The+World&form=QBLH&qs=PN&sk=HS1PN4&pq=&sp=6&sc=8-0

http://search.yahoo.com/search;_ylt=AnQN0c997QR5SIYcYt.h2YCbvZx4?p=golf&toggle=1&cop=mss&ei=UTF-8&fr=yfp-t-701

【问题讨论】:

    标签: php query-string


    【解决方案1】:

    你(我)可以写一个。

    function getValueFromDomain($urls, $domain, $key) {
        foreach ($urls as $url) {
            if (preg_match('/https?:\/\/[^\/]*?' . preg_quote($domain) . '\//', $url)) {
                parse_str(substr($url, strpos($url, '?') + 1), $output);
                if (isset($output[$key])) {
                    $array = explode(' ', $output[$key]);
                    return $array;
                }
            }
        }
        return array();
    }
    

    只是从@Jose 的回答中窃取了一点代码 :)

    更新:已测试,无效,已修复,有效。

    更新 2:毕竟没用,经过测试、修复、工作。

    更新 3:增加了对 HTTPS 的支持

    【讨论】:

    • 哦,嘿@Jonah!抱歉,没看到你更新了。这个问题(据我了解)是,如果我要查找的密钥不是直接出现在“?”之后(例如,如果有多个键)那么它不会被设置。是吗?
    • 不,它工作得很好。我是说这是@Jose 的解决方案的问题。
    • @Jonah, $url = http://query.nytimes.com/search/sitesearch?date_select=full&query=tiger&type=nyt&x=0&y=0 parse_str(substr($url, strpos($url, '?') + 1), $output); $output 返回{"date_select":"full"}
    • 我运行了它,它返回{"date_select":"full", "query":"tiger", "type":"nyt", "x":"0", "y":"0"}。什么意思?
    • 哦,完美!对不起,我的错。我给它提供了编码的 URL。很棒的功能!
    【解决方案2】:

    应该这样做..

    <?php
        $str = "http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=a+tale+of+two+cities&x=0&y=0";
        parse_str($str, $output);
        $array =  explode(" ",$output['field-keywords']);
        print_r($array);
    
    ?>
    

    【讨论】:

    • 很好,但是 OP 希望能够搜索特定域的 URL 数组,并从中获取值。到了一半。
    • @Emile:试试parse_url():se.php.net/manual/en/function.parse-url.php
    • 我喜欢这个答案,但它不适用于除亚马逊示例之外的任何其他 URL。我在上面提供了一个 bing 和一个 yahoo 示例。知道为什么吗?
    • @Emile: parse_url 在&amp; 处爆炸一个字符串。 Bing 和 Yahoo 将查询作为第一个参数。您需要将parse_str($str,... 更改为我的答案。
    • @Jonah,看来我需要两者的结合:)
    【解决方案3】:

    按照我阅读问题的方式,您只需要将查询字符串索引名称传递给函数,例如...

    function get_keywords($parameter){
            $words = explode(" ", $_GET[$parameter]);
             return $words;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-31
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 2020-04-26
      • 2015-08-26
      相关资源
      最近更新 更多