0

我的网站 (rillist.com) 使用 php 来获取 facebook URL。我注意到许多用户不小心将多余的字符 (?fref=ts) 粘贴到 id,因为它们只是复制/粘贴。

有没有办法强制某些短语脱离 php 的回声?谢谢

4

4 回答 4

2

我为脚本中的类似问题构建了这两个函数。它们可能是您解决麻烦所需要的。

PS请尝试更具体并添加一些代码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; 
  }
于 2012-10-06T20:55:06.220 回答
0

您可以使用正则表达式来实现这一点:

$bad_url = "rillist.com/?id=el.tee?fref=ts";
$good_url = preg_replace('/(.+\?[^?]+)\?.*/sim', '$1', $bad_url);
于 2012-10-06T21:17:22.827 回答
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);

(这按原样工作,抱歉变量名不好)

于 2012-10-06T22:04:02.380 回答
0

有一种相当优雅的方法可以做到这一点,它需要pecl_http扩展。

http_build_url($url, array(), HTTP_URL_STRIP_QUERY)

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

于 2012-10-06T21:38:02.413 回答