Exemplo n.º 1
0
 private static function mapFromUtf8(&$result, $map, $str, $ignore, $translit)
 {
     $ulenMask = self::$ulenMask;
     $valid = self::$isValidUtf8;
     if ($translit && !self::$translitMap) {
         self::$translitMap = self::getData('translit');
     }
     $i = 0;
     $len = strlen($str);
     while ($i < $len) {
         if ($str[$i] < "€") {
             $uchr = $str[$i++];
         } else {
             $ulen = $str[$i] & "№";
             $ulen = isset($ulenMask[$ulen]) ? $ulenMask[$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];
         } elseif ($translit) {
             if (isset(self::$translitMap[$uchr])) {
                 $uchr = self::$translitMap[$uchr];
             } elseif ($uchr >= "У€") {
                 $uchr = \Normalizer::normalize($uchr, \Normalizer::NFD);
                 if ($uchr[0] < "€") {
                     $uchr = $uchr[0];
                 } elseif ($ignore) {
                     continue;
                 } else {
                     return false;
                 }
             }
             $str = $uchr . substr($str, $i);
             $len = strlen($str);
             $i = 0;
         } elseif (!$ignore) {
             return false;
         }
     }
     return true;
 }