【问题标题】:Removing redundant variables from a query string从查询字符串中删除冗余变量
【发布时间】:2011-12-09 04:36:31
【问题描述】:

是否有人知道从查询字符串中删除冗余变量的方法。

例如,从这里减少以下 URL:

youtube.com/watch?v=123&feature=g-all&something=lalala

致以下:

youtube.com/watch?v=123

另外,您如何比较具有不同查询字符串的两个 URL 以检查它们是否是同一个页面?

【问题讨论】:

  • v 查询字符串中您感兴趣的唯一部分吗?
  • 除非您将“冗余”定义得足以让编译器满意,否则不会发生。
  • 这只是一个例子。可以是 'index.php?id=123' 或 'pagename.php?redundant=vaviable' 等。
  • 如果2页可以是任何东西,验证2页相同的共性是什么?只有页面上的内容或 URL 中的特定内容?
  • 所以……它仍然存在……上下文中的“冗余”是什么意思

标签: php query-string


【解决方案1】:

php为此内置了函数; parse_url() 和parse_str()

parse_str( 'watch?v=123&feature=g-all&something=lalala' );

// returns

array(3) {
  ["v"]=>
  string(3) "123"
  ["feature"]=>
  string(5) "g-all"
  ["something"]=>
  string(6) "lalala"
}

所以,你可以使用这两个函数来提取你想要的参数,而不必爆炸和猜测参数的位置。

$url = parse_url( "youtube.com/watch?v=123&feature=g-all&something=lalala" );

parse_str( $url['query'], $query );

echo 'youtube.com/?v=' . $query["v"];  // youtube.com/?v=123

这应该比爆炸甚至使用正则表达式更好。

【讨论】:

    【解决方案2】:

    试试:

    $url = "youtube.com/watch?v=123&feature=g-all&something=lalala"; echo $finalUrl = array_pop(array_reverse(explode("&", $url)));

    【讨论】:

    • 您需要在explode调用中指定2个限制。应该提高性能(要合并的数组元素更少)。
    • 感谢您的回复!唯一的问题是它依赖于第一个变量是唯一需要识别页面的变量。例如,这不适用于 Google 搜索结果页面。我想可以将第一个 URL 的元标记与第二个 URL 的元标记进行比较,以确保它们是同一个页面?
    【解决方案3】:

    在遇到第一个 & 符号时爆炸

    <?php
    $url = "youtube.com/watch?v=123&feature=g-all&something=lalala";
    $final = explode("&", $url, 2);
    echo $final[0];
    ?>
    

    输出

    youtube.com/watch?v=123
    

    【讨论】:

    • 函数的第三个orgumnet,需要吗?
    • @punit 可选,正如 Josh 所说,它纯粹是一种性能增强。
    猜你喜欢
    • 2012-07-23
    • 2011-07-28
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多