Подтвердить что ты не робот

Как удалить http, https и slash из пользовательского ввода в php

Пример ввода пользователем

http://domain.com/
http://domain.com/topic/
http://domain.com/topic/cars/
http://www.domain.com/topic/info/

Я хочу, чтобы php-функция сделала вывод вроде

domain.com
domain.com/topic/
domain.com/topic/cars/
www.domain.com/topic/info/

Дайте мне знать:)

4b9b3361

Ответ 1

Вы должны использовать массив "запрещенных" терминов и использовать strpos и str_replace, чтобы динамически удалить их из переданного URL:

function remove_http($url) {
   $disallowed = array('http://', 'https://');
   foreach($disallowed as $d) {
      if(strpos($url, $d) === 0) {
         return str_replace($d, '', $url);
      }
   }
   return $url;
}

Ответ 2

ereg_replace теперь устарел, поэтому лучше использовать:

$url = preg_replace("(^https?://)", "", $url );

Это удаляет либо http://, либо https://

Ответ 3

Я бы предложил использовать инструменты, предоставленные PHP, посмотрите parse_url.

<?php
$url = 'http://username:[email protected]/path?arg=value#anchor';

print_r(parse_url($url));

echo parse_url($url, PHP_URL_PATH);
?>

Вышеприведенный пример выводит:

Array
(
    [scheme] => http
    [host] => hostname
    [user] => username
    [pass] => password
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)
/path

Похоже, вам нужно как минимум host + path (добавьте другие, если необходимо, например query):

$parsed = parse_url('http://www.domain.com/topic/questions/');

echo $parsed['host'], $parsed['path'];

    > www.domain.com/topic/questions/

Приветствия

Ответ 4

Вы можете удалить как https, так и http в одной строке с помощью ereg_replace:

$url = ereg_replace("(https?)://", "", $url);

Ответ 5

если его первые символы в строке вы можете использовать substr (0,8), и он удалит первый 8-й символ если он не использует функцию str_replace() http://php.net/manual/en/function.str-replace.php

Ответ 6

Вы можете использовать функциональность parse url PHP. Это будет работать для всех протоколов, даже ftp://или https://

Eiter получает компонент протокола и подставляет его из URL-адреса или просто объединяет остальные части вместе...

http://php.net/manual/de/function.parse-url.php

Ответ 7

У меня недавно был такой же вопрос, но это лучше всего работает:

$url = preg_replace("(https?://)", "", $url );

Очень чистый и эффективный.

Ответ 8

<?php
// user input
$url = 'http://www.example.com/category/website/wordpress/wordpress-security/';
$url0 = 'http://www.example.com/';
$url1 = 'http://www.example.com/category/';
$url2 = 'http://www.example.com/category/website/';
$url3 = 'http://www.example.com/category/website/wordpress/';

// print_r(parse_url($url));
// echo parse_url($url, PHP_URL_PATH);

$removeprotocols = array('http://', 'https://');

echo '<br>' . str_replace($removeprotocols,"",$url0);
echo '<br>' . str_replace($removeprotocols,"",$url1);
echo '<br>' . str_replace($removeprotocols,"",$url2);
echo '<br>' . str_replace($removeprotocols,"",$url3);

?>

Ответ 9

Нашли это http://refactormycode.com/codes/598-remove-http-from-url-string

function remove_http($url = '')
{
    if ($url == 'http://' OR $url == 'https://')
    {
        return $url;
    }
    $matches = substr($url, 0, 7);
    if ($matches=='http://') 
    {
        $url = substr($url, 7);     
    }
    else
    {
        $matches = substr($url, 0, 8);
        if ($matches=='https://') 
        $url = substr($url, 8);
    }
    return $url;
}