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; }
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; }