我的网站(rillist.com)使用php来获取Facebook网址。 我注意到很多用户不小心粘贴了额外的字符(?fref = ts)到id,因为它们只是复制/粘贴。
有没有办法强制某些短语出自php回声? 谢谢
答案 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);
(这可以原样,对不好的变量名称抱歉)