Source for file Lang.php

Documentation is available at Lang.php

  1. <?php
  2.  
  3. /**
  4.  * Validates the HTML attribute lang, effectively a language code.
  5.  * @note Built according to RFC 3066, which obsoleted RFC 1766
  6.  */
  7. {
  8.     
  9.     public function validate($string$config$context{
  10.         
  11.         $string trim($string);
  12.         if (!$stringreturn false;
  13.         
  14.         $subtags explode('-'$string);
  15.         $num_subtags count($subtags);
  16.         
  17.         if ($num_subtags == 0return false// sanity check
  18.         
  19.         // process primary subtag : $subtags[0]
  20.         $length strlen($subtags[0]);
  21.         switch ($length{
  22.             case 0:
  23.                 return false;
  24.             case 1:
  25.                 if (($subtags[0== 'x' || $subtags[0== 'i') ) {
  26.                     return false;
  27.                 }
  28.                 break;
  29.             case 2:
  30.             case 3:
  31.                 if (ctype_alpha($subtags[0]) ) {
  32.                     return false;
  33.                 elseif (ctype_lower($subtags[0]) ) {
  34.                     $subtags[0strtolower($subtags[0]);
  35.                 }
  36.                 break;
  37.             default:
  38.                 return false;
  39.         }
  40.         
  41.         $new_string $subtags[0];
  42.         if ($num_subtags == 1return $new_string;
  43.         
  44.         // process second subtag : $subtags[1]
  45.         $length strlen($subtags[1]);
  46.         if ($length == || ($length == && $subtags[1!= 'x'|| $length || !ctype_alnum($subtags[1])) {
  47.             return $new_string;
  48.         }
  49.         if (!ctype_lower($subtags[1])) $subtags[1strtolower($subtags[1]);
  50.         
  51.         $new_string .= '-' $subtags[1];
  52.         if ($num_subtags == 2return $new_string;
  53.         
  54.         // process all other subtags, index 2 and up
  55.         for ($i 2$i $num_subtags$i++{
  56.             $length strlen($subtags[$i]);
  57.             if ($length == || $length || !ctype_alnum($subtags[$i])) {
  58.                 return $new_string;
  59.             }
  60.             if (!ctype_lower($subtags[$i])) {
  61.                 $subtags[$istrtolower($subtags[$i]);
  62.             }
  63.             $new_string .= '-' $subtags[$i];
  64.         }
  65.         
  66.         return $new_string;
  67.         
  68.     }
  69.     
  70. }

Documentation generated on Thu, 19 Jun 2008 18:49:39 -0400 by phpDocumentor 1.4.2