Есть ли способ, каким образом я могу вычеркнуть переменные из ссылки, используя 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();