【PHP】日本語ドメインをピュニコードに変換する方法

公開日:
更新日:
カテゴリー: 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にて規定されているとのことです。

 

頑張って書いたのでちょろっと読んでほしい!

 

コメント

まだコメントはありません。

コメントフォーム
お名前
コメント