Как мне удалить http, https и слеш из пользовательского ввода в php - PullRequest
35 голосов
/ 05 декабря 2010

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

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

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

domain.com
domain.com/topic/
domain.com/topic/cars/
www.domain.com/topic/questions/

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

Ответы [ 9 ]

102 голосов
/ 17 января 2013

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

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

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

29 голосов
/ 05 декабря 2010

Вы должны использовать массив «запрещенных» терминов и использовать 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;
}
22 голосов
/ 17 января 2013

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

<?php
$url = 'http://username:password@hostname/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/

Приветствия

5 голосов
/ 06 февраля 2012

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

$url = ereg_replace("(https?)://", "", $url);
2 голосов
/ 02 мая 2018

Создать массив:

$ remove = array ("http://","https://");

и заменить его пустой строкой:

str_replace ($ remove," ", $ url);

это будет выглядеть примерно так:

function removeProtocol($url){
    $remove = array("http://","https://");
    return str_replace($remove,"",$url);
}

Str_replace вернет строку, если ваш стог сена (входной) является строкой, и вы заменяете свои стрелки в массиве на строку.Это хорошо, так что вы можете избежать лишних циклов.

Счастливое кодирование!

1 голос
/ 05 декабря 2010

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

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

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

0 голосов
/ 25 июля 2015
<?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);

?>
0 голосов
/ 05 декабря 2010

нашел это 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;
}
0 голосов
/ 05 декабря 2010

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

...