PHP-запрос

Есть ли способ, каким образом я могу вычеркнуть переменные из ссылки, используя PHP, например, если у меня есть ссылка, которая читает http://localhost/link/index.php?s=30&p=3 как бы я отключил ?s=30&p=3 поэтому моя ссылка читает http://localhost/link/index.php

 list($url) = explode("?", $longUrl, 2); 

Редактировать ( предложено Hoohah ):

Также вы можете использовать strstr () (PHP 5.3.0):

 echo strstr($longurl, "?", TRUE); 

Для этого PHP имеет встроенную функцию.

Это parse_url () . Взгляните на возможные возвращаемые значения. В этом случае мы можем использовать scheme , host и path .

Например:

 <?php $info = parse_url("http://localhost/link/index.php?s=30&p=3"); echo $info["scheme"] . "://" . $info["host"] . $info["path"]; // Output: http://localhost/link/index.php ?> 

Живой пример


Преимущество этого метода в использовании метода explode() заключается в том, что он дает вам возможность контролировать, хотите ли вы указывать имя пользователя, пароль и порт, если они включены. В приведенном выше коде не будет показано ни одного из них, поэтому http://user:pass@localhost:81/link/index.php?s=30&p=3 вернет http://localhost/link/index.php , зачистив имя пользователя, пароль и номер порта, что я и предполагаю, что вы захотите. Имя пользователя, пароль и порт доступны как $info["user"] , $info["pass"] и $info["port"] .

Метод explode() не работает, если пароль содержит вопросительные знаки . Этот метод не сработает даже с ? и @ знаки в пароле .


В заключение, если вы собираетесь иметь дело с номерами портов, именами пользователей и паролями, вы можете использовать приведенный ниже код (который имеет одну добавленную строку) для удаления имен пользователей и паролей, но сохраните номер порта:

 <?php $info = parse_url("http://user:__?**@@@@&?ss@localhost:80/link/index.php?s=30&p=3"); // If port is present add a colon before it, if not make it an empty string. isset($info["port"]) ? $port = ":" . $info["port"] : $port =""; echo $info["scheme"] . "://" . $info["host"] . $port . $info["path"]; // Outputs: http://localhost:80/link/index.php ?> 

Живой пример


Наконец, вы действительно не должны использовать имя пользователя и пароль в ссылке. Из RFC2396

Некоторые схемы URL используют формат «user: password» в поле userinfo. Эта практика НЕ ​​РЕКОМЕНДУЕТСЯ, потому что передача информации аутентификации в ясном тексте (например, URI) оказалась угрозой безопасности практически в каждом случае, когда она была использована.

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

 $pos = strpos($url, '?'); if($pos !== FALSE) { $url = substr($url, 0, $pos); } 
 $url = 'http://localhost/link/index.php?s=30&p=3'; $d = explode("?", $url); $stripped = reset($d); 
 $fullUrl = "http://localhost/link/index.php?s=30&p=3#dontreplace"; $urlData = parse_url($fullUrl); $url = str_replace('?'.$urlData['query'],'',$fullUrl); 

Это решение учитывает, что после пареметров вы можете иметь hashtag и не заменять его.

Если вам просто все равно, что после? затем используйте другие ответы

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

Я не тестировал это, но вы, вероятно, могли бы сделать что-то вроде:

 $my_url = 'http://localhost/link/index.php?s=30&p=3'; $split = explode('?', $my_url); $new_url = $split[0]; 
 parse_url('http://localhost/link/index.php?s=30&p=3',PHP_URL_PATH); 

Если U нужно разобрать запрошенный url, U может просто взять его из globals:

 // http://localhost/foo/bar?foo=bar&Foo1=Bar1 var_dump($_SERVER['QUERY_STRING']); // string(17) "foo=bar&Foo1=Bar1" 

Если используется компонент symfony / http-foundation, U может получить строку запроса из класса Request следующим образом:

 $request = \Symfony\Component\HttpFoundation\Request::createFromGlobals(); $queryString = $request->getQueryString();