从URL中删除字符(php)

时间:2012-10-06 20:45:02

标签: php url

我的网站(rillist.com)使用php来获取Facebook网址。 我注意到很多用户不小心粘贴了额外的字符(?fref = ts)到id,因为它们只是复制/粘贴。

有没有办法强制某些短语出自php回声? 谢谢

4 个答案:

答案 0 :(得分:2)

我已经在脚本中为类似问题构建了这两个函数。 它们可能是你需要解决的问题。

P.S。请尝试更具体,并添加一些代码URL等示例,以帮助人们更好地了解您想要做的事情。

  # Removing param from QUERY_STRING.
  function unkey_querystring($query_string, $key) { 
    $query_array = array();
    parse_str($query_string, $query_array);

    unset($query_array[$key]);

    $query_string = http_build_query($query_array);

    return $query_string;
  }

  # Remove param from URL.
  function unkey_address($url, $key) { 
    $query_string = substr(strstr($url, "?"), 1);
    $base_url = str_replace($query_string, "", $url);

    $query_string = unkey_querystring($query_string, $key);
    return $base_url.$query_string; 
  }

答案 1 :(得分:0)

您可以使用正则表达式实现此目的:

$bad_url = "rillist.com/?id=el.tee?fref=ts";
$good_url = preg_replace('/(.+\?[^?]+)\?.*/sim', '$1', $bad_url);

答案 2 :(得分:0)

有一种相当优雅的方法,它需要pecl_http扩展。

http_build_url($url, array(), HTTP_URL_STRIP_QUERY)

可以找到http_build_url的{​​{1}}的PHP端口,您应该能够将其放入任何代码库中而不会出现问题...我使用此代码来验证我的解决方案。

答案 3 :(得分:0)

据我了解,你想要像这样做某事

$url = 'http://facebook.com/page?test=yes&fref=ts'; // the facebook URL

$_MGET = parse_url($url); // split the URL into path, query and host

$_MGET = '?'.$_MGET['query']; // re-set $_MGET with a better query

if(strpos($_MGET, "fref=ts") > 0) { // find out if their is "fref=ts"
  $before_fref = $_MGET[strpos($_MGET, "fref=ts")-1]; // get character before "fref=ts"
  $_MGET = str_replace(($before_fref == "?" ? "fref=ts&" : "&fref=ts"), "", $_MGET); // replace "fref=ts" according to previous char
}

echo $_MGET; // echo new url

// unset
unset($_MGET);
unset($before_fref);

(这可以原样,对不好的变量名称抱歉)