
PHPのpreg_matchでURLのサブドメイン部分とドメイン部分を取得したいのですが、どのように書けばよいでしょうか?
たとえば、「http://www.example.com/index.html」だった場合、
「www」と「example.com」を取得して、
「http://sample.www.example.co.jp」だった場合は、
「sample.www」と「example.co.jp」が取得したいと考えています。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
もう、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の権限が委譲されているようなサブドメインだってあるわけですからね。
No.3
- 回答日時:
なんとなくフローを考えてみました。
1. 正規表現でサブドメインを含むドメインを取得(ex. www.example.com)
2. 1で取得した文字列を「.」をデリミタとして配列に分解(簡単のため配列Aと呼ぶ)
3. 配列Aの後ろから2番目の要素の文字数で分岐
3文字未満→配列Aの後ろから3番目までの要素を「.」で結合したものがドメイン、それ以外の要素を「.」で結合したものがサブドメイン
3文字以上→配列Aの後ろから2番目までの要素を「.」で結合したものがドメイン、それ以外の要素を「.」で結合したものがサブドメイン
こんな感じでいけるんじゃないでしょうか。配列Aの要素数が2未満の場合の処理などもつけておかないと不備があるので意外と面倒な処理ですね。
もっと簡単な処理があるかと思いますがとりあえず参考になれば。
No.2
- 回答日時:
ごめんなさい、質問がかみ合わないので再度確認します。
>「http://sample.www.example.co.jp」だった場合は、
>「sample.www」と「example.co.jp」が取得したいと考えています。
というのは誤りで、
「sample」と「www.example.co.jp」が取得できればいいのですね?
もし、「sample.www」と「example.co.jp」のようなとり方を
したいのであればどういう判断で「sample.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」と
それ以外の部分を分離して取得したいというのが希望です。
No.1
- 回答日時:
>「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)に分けたいということです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(IT・Webサービス) MacとWindows Google検索した時のURL表示の違いについて 1 2022/11/17 10:38
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- Web・クリエイティブ 1.現在webデザイン系のサイト開発・運営してるのですが、サイト内ジャンルに「人間関係」を入れるor 1 2022/11/12 11:11
- ドメイン・サーバー・クラウドサービス プロトコル? 2 2022/09/06 09:16
- Oracle TOPページ以外の、301リダイレクトの記述設定について 1 2022/08/12 17:14
- デスクトップパソコン パソコンは電源ユニットから壊れるのでしょうか 6 2022/07/25 18:58
- ドメイン・サーバー・クラウドサービス CSR生成やSSL証明書の提出について 1 2022/09/19 11:38
- SEO googleサーチコンソールで、重複URLが多数発生、その修正方法について 2 2023/06/23 16:15
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- その他(プログラミング・Web制作) 恒久的リダイレクトについて 2 2023/07/13 15:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列をループでたくさん宣言し...
-
$_SESSIONに二次元配列を使える...
-
SQL文の実行結果を変数で受けて...
-
CakePHPのfindの取得件数は?
-
【Smarty】foreach関数やsectio...
-
xml_parse_into_structを使うと...
-
連想配列のprint_rやvar_dump出...
-
ネストが深い時のforeachはどう...
-
String だと「 ByRef引数の型が...
-
C言語の配列をPush(追加)する...
-
np.stack()とnp.array()の違い
-
C言語でCSVファイルの行数を読...
-
多次元配列をエンコードする関...
-
多次元配列のカウント+1の仕方
-
別ファイルの構造体の値を読み...
-
エラーメッセージ(無効な間接...
-
php で1から100までの素数の表...
-
VB.NET で 二次元のハッシュは...
-
csvの内容を行単位で削除したい
-
行列
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
String だと「 ByRef引数の型が...
-
配列をループでたくさん宣言し...
-
$_SESSIONに二次元配列を使える...
-
チェックボックス複数選択 mys...
-
配列一致(要素順番は違うが内容...
-
file_existsでファイル名の部分...
-
Smartyのテンプレートからjavas...
-
ネストが深い時のforeachはどう...
-
foreachのなかで次のキーを参照...
-
漢字のソートについて
-
PHPにてクラスを配列にすること...
-
ExcelVBAのチェックボックスに...
-
URLのサブドメインとドメイン部...
-
PHPのカッコ[ ]の使い方について
-
配列を回すとき、最後の要素だ...
-
PHPのPOSTでの半角スペース
-
PHPのループ数限界値について
-
$_POSTを一括してサニタイズし...
-
postgresql関数をつかったレコ...
-
ファイルから指定行数分だけ読...
おすすめ情報