Intereting Posts
Как я могу изменить имя тега XML с помощью PHP / SimpleXML? Какая правильная длина случайного кода используется как атрибут select / join mysql PHP нечувствительный к регистру взрыв () Как определить, вышел ли пользователь, в php? Преобразование результатов регулярного выражения в нижний регистр Как установить параметр пользовательской ширины в тег img, созданный tinymce? Предупреждение: sqlsrv_num_rows () ожидает, что параметр 1 будет ресурсом, boolean Что такое временная метка Unix и зачем ее использовать? Мне нужно регулярное выражение php, которое заменяет один тег другим PHP Curl не хранит эхо-данные json_encoded Правильный способ преобразования строки в long int в PHP Пользовательская вспышка CakePHP для loginError Профилирование PHP с помощью microtime (): Отрицательное время? Как хорошо использовать многоядерные процессоры в ваших PHP / MySQL приложениях? XAMPP – «Эта веб-страница недоступна»

Удаление строки запроса в PHP (иногда на основе referrer)

Привет в Facebook на домашней ссылке есть строка запроса на нем следующим образом: facebook.com/?ref=home когда вы щелкаете по ссылке и переходите на главную страницу, запрос автоматически удаляется. Однако, если бы мне пришлось вручную вводить эту ссылку, запрос НЕ удаляется. Любая идея о том, как они это сделали?

Самый простой способ в PHP:

 $url = preg_replace('/\?.*/', '', $url); 

То, что делает Facebook, вероятно, является чем-то вроде JavaScript:

 if (location.href.match(/\?.*/) && document.referrer) { location.href = location.href.replace(/\?.*/, ''); } 

Используйте 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']); } 

Без регулярных выражений или фактического анализа URL с помощью parse_url , терпимости к URL-адресам без строки запроса:

 $url = reset((explode('?', $url))); 

Вот еще один уловка ответа:

$url = strtok($url, '?');

Это ваш ответ, если вы когда-либо пытаетесь выиграть у Code Golf. В нем есть…

  • наименьшие символы
  • наименьшие строки
  • наименее функциональные вызовы
  • разумный URL-адрес, есть ли строка запроса

Я утверждаю, что они проверяют заголовок 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.

Кажется, вы задаете два вопроса. Как определить, была ли страница посещена через 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/ 

Легче и эффективнее, потому что вам не нужны регулярные выражения.

 $url = substr($url,0,strpos($url, '?')); 

Другое решение (если вы хотите также получить строку запроса)

 list($url,$querystring) = array_pad(explode('?', $url, 2), 2, null)); 

Вы можете использовать это:

 function removeQueryStringFromURL ( $url ) { $urlparts = parse_url($url); if ( $urlparts != FALSE) { $url = http_build_url("http://user@www.example.com/pub/index.php?a=b#files", array( "scheme" => $urlparts['scheme'], "host" => $urlparts['host'], "path" => $urlparts['path'] )); return $url; } return $url; } 

Помните, что для этого кода требуется расширение pecl_http.

Быстрая и грязная альтернатива для PHP / 5.4.0 и выше:

 $url = explode('?', $url, 2)[0]; 

Демо-версия

Попробуй это

 $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); 

Попробуй это:

 $url = strtr('scheme://hostpath', parse_url($url));