首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将URL与规范化/规范化进行匹配

将URL与规范化/规范化进行匹配
EN

Stack Overflow用户
提问于 2011-12-28 11:26:58
回答 1查看 154关注 0票数 1

我找到了这个解决方案来标准化和匹配相等的URL,但我想知道是否有更优雅的解决方案,PHP没有URL规范化函数吗?

代码语言:javascript
复制
function urlMatch($url1, $url2)
{
    // parse the urls
    $r1 = parse_url($url1);
    $r2 = parse_url($url2);

    // get the variables out of the queries
    parse_str($r1['query'], $v1);
    parse_str($r2['query'], $v2);

    // match the domains and paths
    if ($r1['host'] != $r2['host'] || $r1['path'] != $r2['path'])
        return false;

    // match the arrays
    foreach ($v1 as $key => $value)
        if (array_key_exists($key, $v2) && $value != $v2[$key])
            return false;

    // if we haven't returned already, then the queries match
    return true;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-28 11:51:19

像这样的东西可能更适合你的需求:

代码语言:javascript
复制
function urlMatch($url1, $url2){
  // parse the urls
  $r1 = parse_url($url1);
  $r2 = parse_url($url2);

  if (isset($r1['query'])){
    // get the variables out of the query
    parse_str($r1['query'], $v1);
    // sort arguments so they be in exactly same order
    asort($v1);
    // place sorted arguments back
    $r1['query'] = http_build_query($v1);
  }

  if (isset($r2['query'])){
    parse_str($r2['query'], $v2);
    asort($v2);
    $r2['query'] = http_build_query($v2);
  }

  // Match re-constructed urls (you'll need pecl_http extension for this)
  $matched = http_build_url($r1) === http_build_url($r2);

  return $matched;
}

更新:我对代码进行了一些修改,以处理空查询...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8651521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档