すぐできたので、まとめてみた。

準備する。

libidn、libidn-devel をインストール

1
yum install libidn.x86_64 libidn-devel.x86_64

PHP IDNA Extension をインストール

1
2
3
4
5
6
7
wget http://www.xarg.org/download/idna-1.0.0.tar.gz
tar zxvf idna-1.0.0.tar.gz
cd idna-1.0.0
phpize
./configure
make
make install

ここにインストールされました

1
2
3
updatedb
locate idna.so
#=>	/usr/lib64/php/modules/idna.so

php.ini に記述

1
2
3
4
vi /etc/php.ini
    extension_dir = "/usr/lib64/php/modules" #追記
    extension=idna.so                                   #追記
/etc/init.d/httpd restart

試してみる

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
        function puny_ahref($puny,$uni)
        {
                echo "<a href='http://$puny.jp/'>$puny.jp</a><br />";   
                echo "<a href='http://$puny.jp/'>$uni.jp</a><br />";
        }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>vps.ngsw.jp</title>
</head>
<body>
  <h1>punycode変換</h1>
<form action="./punycode.php" method="post">
        <p><input type="text" name="domain_JP" size="30">.jp</p>
        <input type="submit" value="POST">
</form>
<?php
        if (isset($_POST['domain_JP'])){
#              $punycode = htmlspecialchars($_POST['domain_JP']);
                $punycode = htmlspecialchars($_POST['domain_JP'] , ENT_QUOTES , 'UTF-8');
                $punycode = idna_toASCII("$punycode");
                $unicode  =     idna_toUnicode("$punycode");
                puny_ahref($punycode,$unicode);
        }
?>
</body>
</html>

これ

1
<input type="text" name="domain_JP" size="30">

の size=“30” はいくつにするのが妥当なんだろ。