Zend_Validate-Hostname.xml 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <sect2 id="zend.validate.set.hostnames">
  2. <title>主机名</title>
  3. <para>
  4. Zend_Validate_Hostname允许你根据一组已知的规范来校验主机名。它检查三种不同的主机名:DNS主机名(例如domain.com),IP地址(例如1.2.3.4),和本地主机名(例如localhost)。缺省地,只有DNS主机名被匹配。
  5. </para>
  6. <para>
  7. <emphasis role="strong">基本用法</emphasis>
  8. </para>
  9. <para>
  10. 一个基本用法的例子如下:
  11. <programlisting role="php"><![CDATA[<?php
  12. require_once 'Zend/Validate/Hostname.php';
  13. $validator = new Zend_Validate_Hostname();
  14. if ($validator->isValid($hostname)) {
  15. // hostname appears to be valid
  16. } else {
  17. // hostname is invalid; print the reasons
  18. foreach ($validator->getMessages() as $message) {
  19. echo "$message\n";
  20. }
  21. }
  22. ]]>
  23. </programlisting>
  24. 这个例子匹配主机名<code>$hostname</code>并在匹配失败的时候用<code>$validator->getMessages()</code>来获得有用的错误信息。
  25. </para>
  26. <para>
  27. <emphasis role="strong">校验不同类型的主机名</emphasis>
  28. </para>
  29. <para>
  30. 你可能发现你也想匹配IP地址,本地主机名,或者是所有允许类型的组合。这个可以在当你实例化它的时候通过传递参数给Zend_Validate_Hostname来实现。 参数应该是一个整型数,它来决定哪种主机名被允许。我们鼓励你使用常量。
  31. </para>
  32. <para>
  33. Zend_Validate_Hostname 常量是: <code>ALLOW_DNS</code> 允许DNS主机名,
  34. <code>ALLOW_IP</code> 允许IP地址, <code>ALLOW_LOCAL</code> 允许本地网络名,和<code>ALLOW_ALL</code> 允许所有三种类型。 你可以用下面的例子仅仅检查IP地址:
  35. <programlisting role="php"><![CDATA[<?php
  36. require_once 'Zend/Validate/Hostname.php';
  37. $validator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_IP);
  38. if ($validator->isValid($hostname)) {
  39. // hostname appears to be valid
  40. } else {
  41. // hostname is invalid; print the reasons
  42. foreach ($validator->getMessages() as $message) {
  43. echo "$message\n";
  44. }
  45. }
  46. ]]>
  47. </programlisting>
  48. </para>
  49. <para>
  50. 你可以用这些类型的组合,也可以用<code>ALLOW_ALL</code>来接受所有主机名类型。例如,你可以通过如下例子实例化Zend_Validate_Hostname对象来接受DNS和本地主机名:
  51. <programlisting role="php"><![CDATA[<?php
  52. $validator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_DNS | Zend_Validate_Hostname::ALLOW_LOCAL);}]]>
  53. </programlisting>
  54. </para>
  55. <para>
  56. <emphasis role="strong">校验国际域名</emphasis>
  57. </para>
  58. <para>
  59. 一些国家代码顶级域名(ccTLDs),例如'de'(德国),在域名中支持国际字符。这些就是大家所知的国际域名(IDN)。这些域名可以用Zend_Validate_Hostname通过用于校验处理的扩展字符来匹配。
  60. </para>
  61. <para>
  62. 目前支持ccTLDs的有:
  63. <itemizedlist>
  64. <listitem>
  65. <para>at (Austria)</para>
  66. </listitem>
  67. <listitem>
  68. <para>ch (Switzerland)</para>
  69. </listitem>
  70. <listitem>
  71. <para>li (Liechtenstein)</para>
  72. </listitem>
  73. <listitem>
  74. <para>de (Germany)</para>
  75. </listitem>
  76. <listitem>
  77. <para>fi (Finland)</para>
  78. </listitem>
  79. <listitem>
  80. <para>hu (Hungary)</para>
  81. </listitem>
  82. <listitem>
  83. <para>no (Norway)</para>
  84. </listitem>
  85. <listitem>
  86. <para>se (Sweden)</para>
  87. </listitem>
  88. </itemizedlist>
  89. </para>
  90. <para>
  91. 匹配IDN域名就像使用标准主机名校验器一样简单,因为IDN匹配是缺省激活的。如果你想禁止IDN校验,可以通过传递参数给Zend_validate_Hostname构造器或通过<code>$validator->setValidateIdn()</code>方法来实现。
  92. </para>
  93. <para>
  94. 你可以象下面通过传递第二个参数给Zend_Validate_Hostname构造器来禁止IDN校验。
  95. <programlisting role="php"><![CDATA[<?php
  96. $validator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_DNS, false);]]>
  97. </programlisting>
  98. 另外你可以通过传递 TRUE 或 FALSE 给 <code>$validator->setValidateIdn()</code> 来激活或者禁止 IDN 校验。如果你试图匹配一个当前不被支持的IDN主机名,并且如果有国际字符在其中,校验很可能会失败。当指定附加字符的ccTLD文件在Zend/Validate/Hostname下不存在时,一个正常的主机名校验将被执行。(这就是在解释上句话中为什么校验会失败,Jason 注)
  99. </para>
  100. <para>
  101. 请注意只有当你允许DNS主机名被校验,IDNs才能被校验。
  102. </para>
  103. <para>
  104. <emphasis role="strong">校验顶级域名</emphasis>
  105. </para>
  106. <para>
  107. 缺省地主机名通过已知的TLDs列表来检查。如果不需要这个功能,它可以被禁止,就像禁止IDN支持一样。你可以通过传递第三个参数给Zend_Validate_Hostname构造器来禁止TLD校验。在下面的例子中,我们通过第二个参数来支持IDN校验。
  108. <programlisting role="php"><![CDATA[<?php
  109. $validator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_DNS, true, false);]]>
  110. </programlisting>
  111. 另外,你可以通过传递 TRUE 或 FALSE 给
  112. <code>$validator->setValidateTld()</code> 来激活或禁止 TLD 校验。
  113. </para>
  114. <para>
  115. 请注意只有当你允许DNS主机名被校验,TLDs才能被校验。
  116. </para>
  117. </sect2>
  118. <!--
  119. vim:se ts=4 sw=4 et:
  120. -->