0

私はすでにこの正確な主題に関する多くの質問を見てきましたが、私の問題を解決するものはないようです. ドメイン名を除いて、Web サイトのアドレスからすべてを削除する関数を作成したいと考えています。たとえば、ユーザーが入力した場合: http://www.stackoverflow.com/blahblahblah私はstackoverflowを取得したいです。ユーザーがfacebook.com/user/baconを入力した場合と同じように、私はfacebookを取得したいと思います。

文字列の特定の部分を削除できる関数または方法を知っている人はいますか? おそらく http を検索し、見つかった場合は // の後まですべてを削除し、次に www を検索し、見つかった場合は . まですべてを削除します。次に、次のドットまですべてを保持し、その後ろのすべてを削除しますか? 今見てみると、http: //www.en.wikipedia.org のようなサイトで問題が発生する可能性があります。

アイデアはありますか (PHP が望ましいですが、JavaScript も歓迎します)。

EDIT 1: 素晴らしいフィードバックのおかげで、私が望むことを行う機能を解決できたと思います:

 function getdomain($url) {
    $parts = parse_url($url);
    if($parts['scheme'] != 'http') {
       $url = 'http://'.$url;
    }
    $parts2 = parse_url($url);

    $host = $parts2['host'];
    $remove = explode('.', $host);

    $result = $remove[0];
    if($result == 'www') {
       $result = $remove[1];
    }

    return $result;
 } 

少なくともサブドメインを考えると完璧ではありませんが、何とかできると思います。最後に 2 つ目の if ステートメントを追加して、配列の長さを確認してください。2 より大きい場合は、アイテム nr0 の代わりにアイテム nr1 を選択します。これは明らかに、.co.uk を使用するドメインに関連する問題を引き起こします (これは長いツリー アイテムになりますが、co を返したくないためです)。私はそれを少し回避しようとし、私が思いついたものを見ていきます. PHP の専門家の方にもご覧いただければ幸いです。私はあなたたちほど熟練も経験もありません... :P

4

6 に答える 6

1

parse_url を使用して、URL をさまざまな部分に分割します。必要なのはホスト名です。次に、ドットで分割して最初の部分を取得します。

$url    = 'http://facebook.com/blahblah';
$parts  = parse_url($url);
$host   = $parts['host']; // facebook.com
$foo    = explode('.', $host);
$result = $foo[0]; // facebook
于 2013-02-13T18:20:16.470 に答える
0

phpのparse_urlメソッドを使用してdomain.comを取得してから、replace.comを空の文字列に置き換えます。私は正規表現に少し錆びていますが、これはうまくいくはずです。

$url='http://www.en.wikipedia.org';
$domain = parse_url($url, PHP_URL_HOST); //Will return en.wikipedia.org
$domain = preg_replace('\.com|\.org', '', $domain);

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

PHP正規表現:URLからドメインを取得

http://rubular.com/r/MvyPO9ijnQ// 正規表現を確認する

于 2013-02-13T18:27:33.233 に答える
0

正規表現に関する情報を探しています。少し複雑なので、読んで準備してください。あなたの場合は、 and を最もよく利用preg_matchpreg_replaceます。パターンに基づいて一致を検索し、一致を置換で置き換えます。

preg_match preg_replace

私は次のようなパターンから始めます: find .com.netまたは.orgそれとそれ以降のすべてを削除します。次に、最後のものを見つけて、.それとその前のすべてを削除します。最後に、//存在する場合は、それとその前のすべてを削除します。

if (preg_match("/^http:\/\//i",$url))
preg_replace("/^http:\/\//i","",$url);

if (preg_match("/www./i",$url))
preg_replace("/www./i","",$url);

if (preg_match("/.com/i",$url))
preg_replace("/.com/i","",$url);

if (preg_match("/\/*$/",$url))
preg_replace("/\/*$/","",$url);

^= 文字列の先頭 i= 大文字と小文字 を区別しない\= エスケープ文字 $= 文字列の末尾

これは、いじって調整する必要がありますが、正しい方向に向けられるはずです。

于 2013-02-13T18:33:00.287 に答える
0

Javascript:

document.domain.replace(".com","")

PHP:

$url = 'http://google.com/something/something';
$parse = parse_url($url);
echo str_replace(".com","", $parse['host']); //returns google
于 2013-02-13T18:19:31.590 に答える
0

parse_url必要なものを正確に返すPHPの関数を使用できます-参照

于 2013-02-13T18:20:56.863 に答える
-2

これは非常に簡単な方法ですが、PHP で必要なことを行う必要があります。

function getDomain( $URL ) {
    return explode('.',$URL)[1];
}

機会があれば更新しますが、基本的にはURLをピリオドで分割し、ドメインであるはずの2番目の項目を返します。www.abc.xyz.com などの長いドメインにはもう少しロジックが必要ですが、通常の URL では十分です。

于 2013-02-13T18:19:00.253 に答える