ホスト名 Zend_Validate_Hostname は、ホスト名が仕様を満たしているかどうかの検証を行います。 三種類の形式のホスト名、つまり DNS ホスト名 (たとえば domain.com)、IP アドレス (たとえば 1.2.3.4) そしてローカルホスト名 (たとえば localhost) の検証が可能です。 デフォルトでは DNS ホスト名のみが有効となります。 Zend_Validate_Hostname でサポートされるオプション Zend_Validate_Hostname では、下記のオプションがサポートされます。 allow: 使用できるホスト名のソートを定義します。 詳しくは、ホスト名の種類 をご覧ください。 idn: IDN ドメインが許可されるかどうか定義します。 このオプションのデフォルトは TRUE です。 ip: これにより、固有の IP バリデーターを定義できます。 このオプションのデフォルトは Zend_Validate_Ip の新規インスタンスです。 tld: TLD が検証されるかどうか定義します。 このオプションのデフォルトは TRUE です。 基本的な使用法 基本的な使用法は、以下のようになります。 isValid($hostname)) { // ホスト名は正しい形式のようです } else { // 不正な形式なので、理由を表示します foreach ($validator->getMessages() as $message) { echo "$message\n"; } } ]]> これは、ホスト名 $hostname を検証し、失敗した場合は その原因を表す便利なエラーメッセージを $validator->getMessages() で取得します。 さまざまな形式のホスト名を検証 IP アドレスやローカルホスト名、あるいはその両方を正しいホスト名として認めたいこともあるでしょう。 その場合は、Zend_Validate_Hostname のインスタンスを作成する際にパラメータを渡します。 このパラメータには、どの形式のホスト名を許可するのかを表す整数値を指定しなければなりません。 できるだけ、Zend_Validate_Hostname の定数を使用するようにしましょう。 Zend_Validate_Hostname の定数は次のとおりです。 ALLOW_DNSDNS ホスト名のみ、 ALLOW_IP は IP アドレス、 ALLOW_LOCAL はローカルネットワーク名、 ALLOW_URIRFC3986 に準拠するアドレス、 ALLOW_ALL は前述の4種類のすべて、 を許可します。 ALLOW_URI に関する追加情報 ALLOW_URI により、RFC3986 に従うホスト名をチェックできます。 これらは、WINS、NetInfo、および .hosts ファイル内で定義されるそれらのようなローカル・ホスト名によって使用される登録された名前です。 IP アドレスだけをチェックするには、以下の例のようにします。 isValid($hostname)) { // ホスト名は正しい形式のようです } else { // 不正な形式なので、理由を表示します foreach ($validator->getMessages() as $message) { echo "$message\n"; } } ]]> ALLOW_ALL を使用して共通のすべてのホスト名形式を許可するほかに、 これらの形式を組み合わせることもできます。 たとえば、 DNS およびローカルホスト名を許可するには、 Zend_Validate_Hostname のインスタンスを次のように作成します。 国際化ドメイン名を検証 国別コードトップレベルドメイン (Country Code Top Level Domains: ccTLDs) の一部、たとえば 'de' (ドイツ) などでは、ドメイン名の中に国際化文字の使用をサポートしています。 これは、国際化ドメイン名 (International Domain Names: IDN) といわれるものです。 これらのドメインについても、Zend_Validate_Hostname の検証プロセスで使用する文字を拡張することで検証できます。 IDN ドメイン これまでに、50以上の ccTLD が IDN ドメインをサポートします。 IDN ドメインに対するマッチングを行う方法は、通常のホスト名の場合とまったく同じです。 というのも、 IDN のマッチングはデフォルトで有効になっているからです。 IDN の検証を無効にしたい場合は、Zend_Validate_Hostname のコンストラクタにパラメータを渡すか、あるいは setValidateIdn() メソッドを使用します。 IDN の検証を無効にするには、Zend_Validate_Hostname のコンストラクタに二番目のパラメータを次のように渡します。 Zend_Validate_Hostname::ALLOW_DNS, 'idn' => false ) ); ]]> あるいは、 TRUE または FALSEsetValidateIdn() に渡すことで、 IDN の検証を有効あるいは無効にすることもできます。 現在サポートされていない IDN ホスト名に対するマッチングを行おうとすると、 国際化文字が含まれている場合に検証に失敗します。 追加の文字を指定した ccTLD ファイルが Zend/Validate/Hostname に存在しない場合は、通常のホスト名の検証を行います。 IDN 検証 IDN の検証は、 DNS ホスト名の検証を有効にしている場合にのみ行われることに注意しましょう。 トップレベルドメインを検証 デフォルトでは、ホスト名の検証は既知の TLD の一覧に基づいて行われます。 この機能が不要な場合は、 IDN サポートを無効にするのと同じ方法で無効にできます。 TLD の検証を無効にするには、Zend_Validate_Hostname のコンストラクタに三番目のパラメータを渡します。 以下の例では、 IDN の検証は二番目のパラメータで有効にしています。 Zend_Validate_Hostname::ALLOW_DNS, 'idn' => true, 'tld' => false ) ); ]]> あるいは、 TRUE または FALSEsetValidateIdn() に渡すことで、 TLD の検証を有効あるいは無効にすることもできます。 TLD 検証 TLD の検証は、 DNS ホスト名の検証を有効にしている場合にのみ行われることに注意しましょう。