前回まででPunycode変換を使う環境が整いましたので、実際に変換する方法を説明します。
環境が設定できていない場合は前のページを参考にして、環境の設定をしておいてください。
phpでREARを参照できるようしないとNet_IDNA2を使用できませんので…。
ではNet_IDNA2を使いドメイン部分用のPunycode変換する方法を説明します。
Punycode変換する方法
<?php ini_set('include_path','.:/home/*******/pear/PEAR'); require_once "Net/IDNA2.php"; $net_idna2=Net_IDNA2::getInstance(); print $net_idna2->encode("日本語URL変換"); ?>
■Net_IDNA2::getInstance();
返り値はNet_IDNA2のインスタンスです。
この返り値を使う事でPunycodeのエンコードやデコードが出来ます。
■インスタンス->encode(変換する文字列);
返り値は「変換する文字列」をPunycodeに変換された文字列です。
この例では「日本語URL変換」が「xn--urss5wyrbnwbk91huk3jgbaxa」に変換されます。
そしてPunycodeは可逆変換なのでエンコード(変換)した文字列をデコード(戻す)が出来ます。
<?php ini_set('include_path','.:/home/*******/pear/PEAR'); require_once "Net/IDNA2.php"; $net_idna2=Net_IDNA2::getInstance(); print $net_idna2->decode("xn--urss5wyrbnwbk91huk3jgbaxa"); ?>
■インスタンス->decode(戻す文字列);
返り値は「戻す文字列」をPunycodeから戻された文字列です。
この例では「xn--urss5wyrbnwbk91huk3jgbaxa」が「日本語URL変換」に変換されます。
これらの関数はドメイン部分用のPunycode変換です。
URLのそれ以外の部分はphpが持つpercent encodingする関数を使います。
ちょっとPunycode変換とは離れますがフォームに入れらたデータを
変換するのに使えるので説明します。
<?php print rawurlencode("日本語URL変換"); ?>
■rawurlencode(“変換する文字列”);
返り値は「変換する文字列」をpercent encodingされた文字列です。
この例では「日本語URL変換」が「%E6%97%A5%E6%9C%AC%E8%AA%9E%EF%BC%B5%EF%BC%B2%EF%BC%AC%E5%A4%89%E6%8F%9B」に変換されます。
<?php print rawurldecode("%E6%97%A5%E6%9C%AC%E8%AA%9E%EF%BC%B5%EF%BC%B2%EF%BC%AC%E5%A4%89%E6%8F%9B"); ?>
■rawurldecode(“変換する文字列”);
返り値は「変換する文字列」をpercent decodingされた文字列です。
この例では「%E6%97%A5%E6%9C%AC%E8%AA%9E%EF%BC%B5%EF%BC%B2%EF%BC%AC%E5%A4%89%E6%8F%9B」が「日本語URL変換」に変換されます。
これらの関数を使えばURLを変換できます。
しかし個別で変換する事は出来ますが面倒ですのでフォームを作ります。
と、いうわけで次回はフォームを使いスムーズに変換できるようにします。