| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- Reviewed: no -->
- <sect2 id="zend.validate.set.hostname">
- <title>Hostname</title>
- <para>
- <classname>Zend_Validate_Hostname</classname> allows you to validate a hostname against a
- set of known specifications. It is possible to check for three different types of hostnames:
- a <acronym>DNS</acronym> Hostname (i.e. <filename>domain.com</filename>), IP address (i.e.
- 1.2.3.4), and Local hostnames (i.e. localhost). By default only <acronym>DNS</acronym>
- hostnames are matched.
- </para>
- <sect3 id="zend.validate.set.hostname.options">
- <title>Supported options for Zend_Validate_Hostname</title>
- <para>
- The following options are supported for <classname>Zend_Validate_Hostname</classname>:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <emphasis><property>allow</property></emphasis>: Defines the sort of hostname
- which is allowed to be used. See <link
- linkend="zend.validate.set.hostname.types">Hostname types</link> for
- details.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis><property>idn</property></emphasis>: Defines if <acronym>IDN</acronym>
- domains are allowed or not. This option defaults to <constant>TRUE</constant>.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis><property>ip</property></emphasis>: Allows to define a own IP
- validator. This option defaults to a new instance of
- <classname>Zend_Validate_Ip</classname>.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis><property>tld</property></emphasis>: Defines if
- <acronym>TLD</acronym>s are validated. This option defaults to
- <constant>TRUE</constant>.
- </para>
- </listitem>
- </itemizedlist>
- </sect3>
- <sect3 id="zend.validate.set.hostname.basic">
- <title>Basic usage</title>
- <para>
- A basic example of usage is below:
- </para>
- <programlisting language="php"><![CDATA[
- $validator = new Zend_Validate_Hostname();
- if ($validator->isValid($hostname)) {
- // hostname appears to be valid
- } else {
- // hostname is invalid; print the reasons
- foreach ($validator->getMessages() as $message) {
- echo "$message\n";
- }
- }
- ]]></programlisting>
- <para>
- This will match the hostname <varname>$hostname</varname> and on failure populate
- <methodname>getMessages()</methodname> with useful error messages.
- </para>
- </sect3>
- <sect3 id="zend.validate.set.hostname.types">
- <title>Validating different types of hostnames</title>
- <para>
- You may find you also want to match IP addresses, Local hostnames, or a combination of
- all allowed types. This can be done by passing a parameter to
- <classname>Zend_Validate_Hostname</classname> when you instantiate it. The parameter
- should be an integer which determines what types of hostnames are allowed. You are
- encouraged to use the <classname>Zend_Validate_Hostname</classname> constants to do
- this.
- </para>
- <para>
- The <classname>Zend_Validate_Hostname</classname> constants are:
- <constant>ALLOW_DNS</constant> to allow only
- <acronym>DNS</acronym> hostnames, <constant>ALLOW_IP</constant> to allow IP addresses,
- <constant>ALLOW_LOCAL</constant> to allow local network names,
- <constant>ALLOW_URI</constant> to allow
- <ulink url="http://tools.ietf.org/html/rfc3986">RFC3986</ulink>-compliant addresses,
- and <constant>ALLOW_ALL</constant> to allow all four above types.
- </para>
- <note>
- <title>Additional Information on ALLOW_URI</title>
- <para>
- <constant>ALLOW_URI</constant> allows to check hostnames
- according to <ulink url="http://tools.ietf.org/html/rfc3986">RFC3986</ulink>. These
- are registered names which are used by <acronym>WINS</acronym>, NetInfo and also local
- hostnames like those defined within your <filename>.hosts</filename> file.
- </para>
- </note>
- <para>
- To just check for IP addresses you can use the example below:
- </para>
- <programlisting language="php"><![CDATA[
- $validator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_IP);
- if ($validator->isValid($hostname)) {
- // hostname appears to be valid
- } else {
- // hostname is invalid; print the reasons
- foreach ($validator->getMessages() as $message) {
- echo "$message\n";
- }
- }
- ]]></programlisting>
- <para>
- As well as using <constant>ALLOW_ALL</constant> to accept all common hostnames types
- you can combine these types to allow for combinations. For example, to accept
- <acronym>DNS</acronym> and Local hostnames instantiate your
- <classname>Zend_Validate_Hostname</classname> object as so:
- </para>
- <programlisting language="php"><![CDATA[
- $validator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_DNS |
- Zend_Validate_Hostname::ALLOW_IP);
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.validate.set.hostname.idn">
- <title>Validating International Domains Names</title>
- <para>
- Some Country Code Top Level Domains (ccTLDs), such as 'de' (Germany), support
- international characters in domain names. These are known as International Domain Names
- (<acronym>IDN</acronym>). These domains can be matched by
- <classname>Zend_Validate_Hostname</classname> via extended characters that are used in
- the validation process.
- </para>
- <note>
- <title>IDN domains</title>
- <para>
- Until now more than 50 ccTLDs support <acronym>IDN</acronym> domains.
- </para>
- </note>
- <para>
- To match an <acronym>IDN</acronym> domain it's as simple as just using the standard
- Hostname validator since <acronym>IDN</acronym> matching is enabled by default. If you
- wish to disable <acronym>IDN</acronym> validation this can be done by either passing a
- parameter to the <classname>Zend_Validate_Hostname</classname> constructor or via the
- <methodname>setValidateIdn()</methodname> method.
- </para>
- <para>
- You can disable <acronym>IDN</acronym> validation by passing a second parameter to the
- <classname>Zend_Validate_Hostname</classname> constructor in the following way.
- </para>
- <programlisting language="php"><![CDATA[
- $validator =
- new Zend_Validate_Hostname(
- array(
- 'allow' => Zend_Validate_Hostname::ALLOW_DNS,
- 'idn' => false
- )
- );
- ]]></programlisting>
- <para>
- Alternatively you can either pass <constant>TRUE</constant> or
- <constant>FALSE</constant> to <methodname>setValidateIdn()</methodname> to enable or
- disable <acronym>IDN</acronym> validation. If you are trying to match an
- <acronym>IDN</acronym> hostname which isn't currently supported it is likely it will
- fail validation if it has any international characters in it. Where a ccTLD file doesn't
- exist in <filename>Zend/Validate/Hostname</filename> specifying the additional
- characters a normal hostname validation is performed.
- </para>
- <note>
- <title>IDN validation</title>
- <para>
- Please note that <acronym>IDN</acronym>s are only validated if you allow
- <acronym>DNS</acronym> hostnames to be validated.
- </para>
- </note>
- </sect3>
- <sect3 id="zend.validate.set.hostname.tld">
- <title>Validating Top Level Domains</title>
- <para>
- By default a hostname will be checked against a list of known <acronym>TLD</acronym>s.
- If this functionality is not required it can be disabled in much the same way as
- disabling <acronym>IDN</acronym> support. You can disable <acronym>TLD</acronym>
- validation by passing a third parameter to the
- <classname>Zend_Validate_Hostname</classname> constructor. In the example below we are
- supporting <acronym>IDN</acronym> validation via the second parameter.
- </para>
- <programlisting language="php"><![CDATA[
- $validator =
- new Zend_Validate_Hostname(
- array(
- 'allow' => Zend_Validate_Hostname::ALLOW_DNS,
- 'idn' => true,
- 'tld' => false
- )
- );
- ]]></programlisting>
- <para>
- Alternatively you can either pass <constant>TRUE</constant> or
- <constant>FALSE</constant> to <methodname>setValidateTld()</methodname> to enable or
- disable <acronym>TLD</acronym> validation.
- </para>
- <note>
- <title>TLD validation</title>
- <para>
- Please note <acronym>TLD</acronym>s are only validated if you allow
- <acronym>DNS</acronym> hostnames to be validated.
- </para>
- </note>
- </sect3>
- </sect2>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|