web-dev-qa-db-ja.com

PHPのユーザー入力からhttp、https、スラッシュを削除するにはどうすればよいですか

ユーザー入力の例

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/

お知らせ下さい :)

36
Blur

「許可されていない」用語の配列を使用し、 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;
}
30
Jacob Relkin

ereg_replaceは非推奨になったため、使用することをお勧めします。

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

これにより、いずれかのhttp://またはhttps://

104
user1985367

ツールを使用することをお勧めします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/

乾杯

22
Madbreaks

Ereg_replaceを使用して、httpsとhttpの両方を1行で削除できます。

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

配列を作成します。

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

そして空の文字列で置き換えます:

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

次のようになります。

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

Haystack(入力)が文字列であり、配列内の針を文字列で置き換えた場合、str_replaceは文字列を返します。すてきなので、余分なループをすべて回避できます。

ハッピーコーディング!

2
Jordan Casey

PHPの解析URL機能を使用できます。これは、ftp://やhttps://を含むすべてのプロトコルで機能します。

Eiterは、プロトコルコンポーネントを取得してUrlから差し引くか、他のパーツを連結して戻します...

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

1
Paul Weber
<?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
OpenWebWar