- 締切済み
URLのサブドメインとドメイン部分の取得
PHPのpreg_matchでURLのサブドメイン部分とドメイン部分を取得したいのですが、どのように書けばよいでしょうか? たとえば、「http://www.example.com/index.html」だった場合、 「www」と「example.com」を取得して、 「http://sample.www.example.co.jp」だった場合は、 「sample.www」と「example.co.jp」が取得したいと考えています。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- zero_8v8
- ベストアンサー率35% (5/14)
もう、5年ほど前の質問なんだけど、私も今日直面して色々調べていてこの質問に行き当たったんですけどねw 書かれているような、例からドメインを抽出するのは、正規表現使えば、PHPでも、Javascriptでも、Perlでもたやすい事ですけど、「たとえば」って書かれているように、世界中のccTLD、gTLD、さらには最近では、.xxxや、.postや、.asiaなどの、sponsoredドメイン、TLD(一番右の部分です)部分が英文字以外なんてのも出てきています。 参考:http://www.iana.org/domains/root/db 参考:http://data.iana.org/TLD/tlds-alpha-by-domain.txt そういった、TLDは、まだどうにでもなるわけですけど、やっかいなのが、second level domain ってやつです。 日本でも、汎用JPドメインと言われている、○○○.JP もあれば、kantei.go.jp みたいに、属性ドメインと呼ばれているもの、keishicho.metro.tokyo.jp みたいに、都道府県型ドメインと言われているようなのまであるわけです。 これは、世界中のccTLDでも言える事で、さらには短いドメインを、「オレオレセカンドレベルドメイン」にしている例だってあるわけです。 言い出せば、キリが無いのですけど、とりあえず私は、各NICで公式に表明されているセカンドレベルドメインまでを、「ドメイン」とするのが、本来の形であろうと思っています。 サブドメインの定義と、ドメインの定義は、各NICが公式に表明しているレベルで、分けるという感じですね。 それで、世界中のNIC回って、情報かき集めてきましたw しかし、NICのURL自体が、404だったり、SSLの証明書は期限が切れていたりで、到底日本のJPNICなどと比べたら悲惨なモノがありましたけどねw 基本的なベースとしての情報は、https://wiki.mozilla.org/TLD_List を使えばいいかと思ったのですけど、上部に注意書きがあるように、メンテもされていないわけです。 上記の、IANAのデータでもセカンドレベルドメインにまでは記載が無いんですよね。 それで、冒頭言いましたように、世界中のNICを結局は訪問して回る事になったわけです。 しかし、英語以外の言語はさすがに…ですし、翻訳しても判らない所も多々あったわけですけど、最終的に、「ほぼ」拾い集めたら、1,717件のセカンドレベルドメインが確認できました。 ここに、入力しようにも文字数的に無理ですからねw データが欲しい方や、見たい方は声かけてもらえましたら、どっかにアップいたします。 しかし、私の目的からすれば、ちょっとこれでもなぁ…って、感じなんですけどね…。 最終的には、whois叩いて、教えてもらうような形のプログラム書かないといけないかなと思っています。 DNSの権限が委譲されているようなサブドメインだってあるわけですからね。
- UmJammer
- ベストアンサー率58% (115/196)
なんとなくフローを考えてみました。 1. 正規表現でサブドメインを含むドメインを取得(ex. www.example.com) 2. 1で取得した文字列を「.」をデリミタとして配列に分解(簡単のため配列Aと呼ぶ) 3. 配列Aの後ろから2番目の要素の文字数で分岐 3文字未満→配列Aの後ろから3番目までの要素を「.」で結合したものがドメイン、それ以外の要素を「.」で結合したものがサブドメイン 3文字以上→配列Aの後ろから2番目までの要素を「.」で結合したものがドメイン、それ以外の要素を「.」で結合したものがサブドメイン こんな感じでいけるんじゃないでしょうか。配列Aの要素数が2未満の場合の処理などもつけておかないと不備があるので意外と面倒な処理ですね。 もっと簡単な処理があるかと思いますがとりあえず参考になれば。
- yambejp
- ベストアンサー率51% (3827/7415)
ごめんなさい、質問がかみ合わないので再度確認します。 >「http://sample.www.example.co.jp」だった場合は、 >「sample.www」と「example.co.jp」が取得したいと考えています。 というのは誤りで、 「sample」と「www.example.co.jp」が取得できればいいのですね? もし、「sample.www」と「example.co.jp」のようなとり方を したいのであればどういう判断で「sample.www」を取り出すかの 根拠を示すべきです。
- yambejp
- ベストアンサー率51% (3827/7415)
>「sample.www」と「example.co.jp」が取得したい どういう考え方で sample → www.example.co.jpやsample.www.example→ co.jp などではなく上記のきりわけになっているのでしょうか? 「sample.www」はサブドメインではないですよね?
補足
補足します。 確かに正式な表現としては、「www.example.co.jp」が 「example.co.jp」ドメインのサブドメインということになりますが、 便宜上、引き渡されたFQDNに対してドメインを除外した部分を サブドメインという表現にしております。 つまり、「www.example.co.jp」の場合、 「co.jp」が属性型ドメインをあらわしており、 ドメイン取得の際に指定する正式なドメインは「example.co.jp」ですので、ドメイン名を「example.co.jp」とし、 除外された「www」をサブドメインという表現にしたかったのです。 若干こらんさせてしまいましたね。 表現にわかりにくい点があるかもしれませんが、 やりたいこととしては、上記で説明したように、 引き渡されたFQDN(www.example.co.jp)から、ドメイン部分(example.co.jp)と、サブドメイン部分(www)に分けたいということです。
補足
>というのは誤りで、 >「sample」と「www.example.co.jp」が取得できればいいのですね? 前回も補足いたしましたとおり、 「sample.www」と「example.co.jp」を取得したいのです。 >もし、「sample.www」と「example.co.jp」のようなとり方を >したいのであればどういう判断で「sample.www」を取り出すかの >根拠を示すべきです。 えっと。。。ドメイン取得を行われたことがありますか? 例えば「www.example.co.jp」というドメインを利用する場合も 取得申請は「example.co.jp」で行いますよね? そのドメイン取得時に指定される「example.co.jp」と それ以外の部分を分離して取得したいというのが希望です。