0

個人のWebサイトのURLを格納するデータベーステーブル列があります。このコラムは、同じWebサイトを2回使用したくないという点でユニークです。

ただし、人は次のようにすることでこれを回避できます。

domain.com
domain.com/hello123
www.domain.com

したがって、私の計画は、ユーザーがレコードを保存するときに、最初のスラッシュの後にすべてを削除して、ドメインのみがデータベースに保存されるようにすることです。

どうすればこれを行うことができますか?これは以前にも何度も行われたと思いますが、非常にシンプルで、ライブラリやその他の長いコードスニペットの使用には興味がないものを探しています。残りの部分を取り除き、ドメイン名だけを保持するものです。

4

4 に答える 4

5

PHPを参照してください:parse_url

// Force URL to begin with "http://" or "https://" so 'parse_url' works
$url = preg_replace('/^(?!https?:\/\/)(.*:\/\/)/i', 'http://', $inputURL);
$parts = parse_url($url);
// var_dump($parts); // To see the parsed URL parts, uncomment this line
print $parts['host'];

リストされているコードを使用すると、サブドメインは一意ではないことに注意してください。www.domain.comdomain.comは別のエントリになります。

于 2012-08-19T20:14:14.527 に答える
3

parse_urlを使用します:

$hostname = parse_url($userwebsite,PHP_URL_HOST);
于 2012-08-19T20:16:00.330 に答える
2
$sDomain = NULL;

foreach (explode('/', $sInput) as $sPart) {
  switch ($sPart) {
    case 'http:':
    case 'https:':
    case '':
      break;

    default:
      $sDomain = $sPart;
      break 2;
  }
}

if ($sDomain !== NULL) {
  echo $sDomain;
}

まず、すべてのスラッシュが区切り文字として使用されます。次に、すべての「既知/サポートされている」スキームと、「http://」から発生する空の部分が無視されます。最後に、次にあるものはすべてに格納され$sDomainます。

PCREの依存関係を気にしない場合は、正規表現を使用することもできます。

if (preg_match('/^https?:\/\/([^\/]+)/', $sInput, $aisMatch) === 1) {
  echo $aisMatch[1];
}
于 2012-08-19T20:18:21.687 に答える
1

あなたは試すことができます

int strrpos ( string $haystack , string $needle [, int $offset = 0 ] )

そしてその結果を

string substr ( string $string , int $start [, int $length ] )

を使用$needle = "/"して$needle = "."

于 2012-08-19T20:13:46.673 に答える