【PHP】日本語ドメインをピュニコードに変換する方法
PHPで日本語ドメインのURLを扱う場合、ピュニコードをもつURL(「http://xn--」から始まるURL)に変換しないとエラーとなります。
ここではPHPで日本語ドメインをピュニコードに変換する方法を説明します(その逆の方法も)。
PearのNet_IDNA2を使う
Web上には日本語ドメインをピュニコードに変換してくれるツールがあるのですが、PHPの処理上で変換できなければ意味がありません。
何かいい方法がないかと探していたのですが、PearのライブラリNet_IDNA2を使ったら簡単に変換できました。
Pearのインストール
Net_IDNA2を使うためには、Pearのインストールが必要です。
Pearのインストール方法は、さくらインターネットでPHPのPEARをインストールするを参照して下さい(ほとんど同じ方法でインストールできると思います)。
Net_IDNA2のインストール
Pearをインストールしたあとは、自分のPearのトップページから「Net_IDNA2」を検索・インストールしてください。
私はなぜか検索しても出てきませんでしたが「Net」のみで検索して自力で探したらありました。
ちなみにNet_IDNAもありますが、こちらは開発終了してるとのことで、Net_IDNA2を使うことにしました。
変換プログラム
<?php //PEARのNet_IDNA2をインクルードする require_once "Net/IDNA2.php"; //Net_IDNA2のインスタンスを作成 $net_idna2 = Net_IDNA2::getInstance(); //URL $url = "http://ほげほげサイト.jp"; //URLに「://xn--」があるか確認 if (strstr($url, '://xn--')) { //URLに「://xn--」があるのでピュニコード→日本語ドメインにデコードする $url = $net_idna2->decode($url); }else{ //URLに「://xn--」がないので日本語ドメイン→ピュニコードにエンコードする $url = $net_idna2->encode($url); } ?>
URLに「http://ほげぴよ.com」を指定すると、以下のように出力されます。
http://xn--18j8cta8c.com
逆に、「http://xn--18j8cta8c.com」を指定すると、以下のように出力されます。
http://ほげぴよ.com
ポイント
単純なプログラムですが、ポイントはURLに「://xn--」が含まれているかどうかを確認することです。
ピュニコード化された日本語ドメインは必ず「://xn--」の部分を持つので、この部分でエンコードされたものか?デコードされたものか?を判別できます。
また、「http://xn--」としないことで「https://xn--」にも対応できます。
ちなみにIDNAとは「Internationalizing Domain Names in Applications(アプリケーションにおけるドメイン名の国際化)」のことで、RFC3490にて規定されているとのことです。
あわせて読んでほしい!
コメント
まだコメントはありません。