Пример #1
0
 protected static function map_from_utf8(&$result, $map, $str, $IGNORE, $TRANSLIT)
 {
     $ulen_mask = self::$ulen_mask;
     $valid = self::$is_valid_utf8;
     if ($TRANSLIT) {
         self::$translit_map or self::$translit_map = self::getData('translit');
     }
     $i = 0;
     $len = strlen($str);
     while ($i < $len) {
         if ($str[$i] < "€") {
             $uchr = $str[$i++];
         } else {
             $ulen = $str[$i] & "ð";
             $ulen = isset($ulen_mask[$ulen]) ? $ulen_mask[$ulen] : 1;
             $uchr = substr($str, $i, $ulen);
             if ($IGNORE && (1 === $ulen || !($valid || preg_match('/^.$/us', $uchr)))) {
                 ++$i;
                 continue;
             } else {
                 $i += $ulen;
             }
         }
         if (isset($map[$uchr])) {
             $result .= $map[$uchr];
         } else {
             if ($TRANSLIT) {
                 if (isset(self::$translit_map[$uchr])) {
                     $uchr = self::$translit_map[$uchr];
                 } else {
                     if ($uchr >= "À") {
                         $uchr = \Normalizer::normalize($uchr, \Normalizer::NFD);
                         $uchr = preg_split('/(.)/', $uchr, 2, PREG_SPLIT_DELIM_CAPTURE);
                         if (isset($uchr[2][0])) {
                             $uchr = $uchr[1];
                         } else {
                             if ($IGNORE) {
                                 continue;
                             } else {
                                 return false;
                             }
                         }
                     }
                 }
                 $str = $uchr . substr($str, $i);
                 $len = strlen($str);
                 $i = 0;
             } else {
                 if (!$IGNORE) {
                     return false;
                 }
             }
         }
     }
     return true;
 }