Привет в Facebook на домашней ссылке есть строка запроса на ней следующим образом: facebook.com/?ref=home
, когда вы нажимаете ссылку и переходите на главную страницу, запрос автоматически удаляется. Однако, если я должен был вручную ввести эту ссылку, запрос будет НЕ удален. Любая идея о том, как они это сделали?
Удаление строки запроса в PHP (иногда на основе referrer)
Ответ 1
Самый простой способ в PHP:
$url = preg_replace('/\?.*/', '', $url);
Что делает Facebook, вероятно, это вещь JavaScript:
if (location.href.match(/\?.*/) && document.referrer) {
location.href = location.href.replace(/\?.*/, '');
}
Ответ 2
Используйте parse_url
, чтобы проверить корректный URL-адрес и удалить строку запроса:
$link = 'http://facebook.com/page.php?ref=home';
if ($url = parse_url($link)) {
printf('%s://%s%s', $url['scheme'], $url['host'], $url['path']);
}
Ответ 3
Без регулярных выражений или фактического синтаксического анализа URL с помощью parse_url
, терпимого к URL-адресам без строки запроса:
$url = reset((explode('?', $url)));
Ответ 4
Вот еще один трюк ответа:
$url = strtok($url, '?');
Это ответ, который вы хотите, если вы когда-либо пытаетесь выиграть у Code Golf. Он имеет...
- наименьшие символы
- наименьшие строки
- наименьшая функция вызывает
- разумный URL-адрес, есть ли строка запроса
Ответ 5
Я утверждаю, что они проверяют заголовок HTTP Referrer и видят, произошел ли щелчок от facebook. Таким образом, они могут решить, удалить строку запроса или нет. Что-то вроде:
$refer=$_SERVER["HTTP_REFERER"];
if ($refer == "facebook.com") {
// this request was done by clicking a link on facebook
.. remove query string.
}
else {
// this request was done by typing the url into the browser
}
Вы можете удалить строку запроса, используя предложенный метод netcoder.
Ответ 6
Легче и эффективнее, потому что вам не нужны регулярные выражения.
$url = substr($url,0,strpos($url, '?'));
Другое решение (если вы хотите также получить строку запроса)
list($url,$querystring) = array_pad(explode('?', $url, 2), 2, null));
Ответ 7
Кажется, вы задаете два вопроса. Как определить, была ли страница посещена через facebook или из внешнего местоположения и как удалить строку запроса из URL-адреса.
Вы можете проанализировать реферер, чтобы узнать, является ли домен facebook.
$parts = parse_url($_SERVER['HTTP_REFERER']);
if (preg_match('/(^|.)facebook.com/', $parts['host'])) {
// remove query string
}
Самый безопасный способ удалить строку запроса - также проанализировать URL-адрес и затем перестроить его.
$parts = parse_url('http://www.facebook.com/?ref=home');
$newUrl = $parts['scheme'].'://'.$parts['host'].$parts['path']; // http://www.facebook.com/
Ответ 8
Вы можете использовать это:
function removeQueryStringFromURL ( $url )
{
$urlparts = parse_url($url);
if ( $urlparts != FALSE)
{
$url = http_build_url("http://[email protected]/pub/index.php?a=b#files",
array( "scheme" => $urlparts['scheme'],
"host" => $urlparts['host'],
"path" => $urlparts['path']
));
return $url;
}
return $url;
}
Помните, что для этого кода требуется расширение pecl_http.
Ответ 9
Быстрая и грязная альтернатива для PHP/5.4.0 и выше:
$url = explode('?', $url, 2)[0];
Ответ 10
Попробуйте это
$url_with_querystring = 'www.mydomian.com/myurl.html?unwantedthngs';
$url_data = parse_url($url_with_querystring);
$url_without_querystring = str_replace('?'.$url_data['query'], '', $url_with_querystring);
Ответ 11
Попробуйте следующее:
$url = strtr('scheme://hostpath', parse_url($url));