PHP – idn_to_ascii()関数の使い方を徹底解説
PHPのidn_to_ascii()関数は、Unicodeで表記された国際化ドメイン名をIDNA ASCII形式(Punycode)に変換するための関数です。IDNAとは「Internationalizing Domain Names in Applications(アプリケーション内での国際化ドメイン名)」の略称で、ASCII以外の文字(日本語やウムラウト付き文字など)を含むドメイン名を扱うための仕組みです。DNSは元々ASCII文字しか扱えないため、この関数を使って「ä」などの非ASCII文字を含むドメインを「xn--」で始まるASCII互換の形式へ変換します。
構文
string idn_to_ascii( str $domain, integer $flags = IDNA_DEFAULT, integer $variant = INTL_IDNA_VARIANT_UTS46, arr &$idna_info = null )
パラメータ
idn_to_ascii()関数は、以下の4つのパラメータを受け取ります。
$domain − 変換対象となるドメイン名です。UTF-8でエンコードされている必要があります。
$flags − IDNA_*系の定数を組み合わせて指定します。
$variant − IDNA 2003規格を使用する場合はINTL_IDNA_VARIANT_2003、UTS#46を使用する場合はINTL_IDNA_VARIANT_UTS46を指定します。
$idna_info − $variantパラメータにINTL_IDNA_VARIANT_UTS46が指定された場合にのみ使用されるパラメータで、変換処理の詳細情報が配列として格納されます。
戻り値
この関数は、ASCII互換形式(Punycode)にエンコードされたドメイン名を返します。変換に失敗した場合はfalseを返します。
例1:基本的な使い方
<?php
// 文字列のドメイン名を変換
print idn_to_ascii('täst.de', 0);
?>
出力結果
xn--tst-qla.de
ウムラウト付きの「täst.de」が、「xn--」プレフィックスを持つASCII互換形式に正しく変換されています。
例2:エンコード済み文字列の扱い
<?php
// ISO-8859-2でエンコードされた文字列
echo idn_to_ascii(utf8_encode('täst.de'));
// "xn--"で始まるドメイン名は、非ASCII文字を
// 含んでいても、すでにASCIIエンコード済みと
// みなされるため変換されません
$ascii = idn_to_ascii("xn--".chr(0xC3).chr(0xA4));
print_r($ascii);
?>
出力結果
xn--tst-fea82a.de
この例では、utf8_encode()でエンコードした文字列を渡すケースと、「xn--」で始まるドメイン名の挙動を確認できます。すでに「xn--」プレフィックスを持つ文字列は、内部に非ASCIIバイトが含まれていても変換対象外となる点に注意してください。
-
PHPのlog()関数とは?自然対数の計算方法と使い方を解説
定義と使い方log() 関数は、数値の自然対数(natural logarithm)を計算します。対数とは、指数関数の逆演算のことです。たとえば 102=100 という関係は「log10100=2」と表せます。自然対数はオイラー数 e を底として計算され、PHP では定義済み定数 M_E によって e の値(2.7182818284590452354)が提供されています。具体例を挙げると、exp(4.60517018599)=100(つまり e4.60517018599=100)が成り立つため、loge100=4.60517018599 となります。PHP では、この自然対数(loge)を l
-
PHPのlcg_value()関数とは?乱数生成の基本と使い方を解説
lcg_value()関数の定義と使い方lcg_value()関数は、0から1までの範囲でランダムな数値(浮動小数点数)を生成するPHP組み込み関数です。「LCG」とは「線形合同法(Linear Congruential Generator)」の略称です。この手法は、不連続な区分線形方程式を用いて擬似乱数列を計算するアルゴリズムで、擬似乱数生成アルゴリズムの中でも最も古くから知られているものの一つです。構文lcg_value ( void ) : floatパラメータこの関数は引数を受け取りません。戻り値lcg_value()関数は、0.0以上1.0以下の範囲にある擬似乱数のfloat値を返し