PHP

日本語ドメインをピュニコード(Punycode)に変換 – PHP

HTMLのAタグのhrefに日本語ドメインを日本語のまま入力すると正しくリンクする事が出来ません。
正しくリンクさせるにはxn--から始まるピュニコードに変換しなければならないのです。

  • ピュニコードに変換してくれるサイト
  • たけぞーさんという方が作成したライブラリ
  • PEARのライブラリ

この3通りの方法を紹介します。

ピュニコードに変換してくれるサイトは、プログラムができなくても使えるので、HTMLしかわからない人でも大丈夫ですよ。

参考サイト

PHPでPunycode変換 – 浜村拓夫の世界
PHPで日本語ドメインの扱う(punycodeに変換)するメモ! | MatsudaPress

日本語ドメインのピュニコード(Punycode)変換・逆変換

日本語がピュニコードに変換した場合「xn--」から始まる英数字と(-)ハイフンに変換されます。

(例)
変換前:日本語.jp
変換後:xn--wgv71a119e.jp

変換・逆変換してくるサイト

HTMLに直接書き込むのであれば日本語ドメインをフォームに入力するだけで
ピュニコードに変換・逆変換してくれるサイトがあります。

変換サイト:日本語JPドメイン名のPunycode変換・逆変換 – 日本語.jp

PHPで変換・逆変換出来るライブラリ

ピュニコードに変換・逆変換できるライブラリがGithubでMITライセンスで配布されています。
作者はたけぞーさんという方です。

一つのPHPファイルだけなので難しくなく簡単に使う事が出来ます。

提供先:PHP-PunycodeEncoder
作者 :takezoh


include_once('punycode.php'); //ライブラリ読み込み
Punycode::set_options(array(
    'charset' => 'UTF-8' //環境に合わせて文字コードを指定
));

$punycode = Punycode::urlencode('日本語.jp'); //ピュニコードに変換
$japanese = Punycode::domainencode('xn--wgv71a119e.jp'); //日本語に逆変換

PHP::PEARで提供されているライブラリ

PEARでは「Net_IDNA2」というピュニコード変換・逆変換してくれるライブラリが提供されていました。
Net_IDNAはサポートが終了しているみたいなので必ず2の方をダウンロードしてください。

提供先:Net_IDNA


require_once('IDNA2.php'); //ライブラリ読み込み
$idna2 = Net_IDNA2::getInstance();

$punycode = $idna2->encode('日本語.jp'); //ピュニコードに変換
$japanese = $idna2->decode('xn--wgv71a119e.jp'); //日本語に逆変換

まとめ

日本語ドメインが登場してから使う事は無かったのですが、
RSSから情報を収集してゴニョゴニョする際に正しくリンクが出来なかったので
調べてみたらピュニコード変換が必要との事でした。

たけぞーさん作のライブラリがインスタンスを作成しなくても使用できるので使い易いかなと思います。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です