267 lines
5.0 KiB
PHP
267 lines
5.0 KiB
PHP
<?php
|
|
/**
|
|
* @package Joomla.Platform
|
|
* @subpackage Language
|
|
*
|
|
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
|
|
* @license GNU General Public License version 2 or later; see LICENSE
|
|
*/
|
|
|
|
defined('JPATH_PLATFORM') or die;
|
|
|
|
/**
|
|
* Class to transliterate strings
|
|
*
|
|
* @package Joomla.Platform
|
|
* @subpackage Language
|
|
* @since 11.1
|
|
* @note Port of phputf8's utf8_accents_to_ascii()
|
|
*/
|
|
class JLanguageTransliterate
|
|
{
|
|
/**
|
|
* Returns strings transliterated from UTF-8 to Latin
|
|
*
|
|
* @param string $string String to transliterate
|
|
* @param boolean $case Optionally specify upper or lower case. Default to null.
|
|
*
|
|
* @return string Transliterated string
|
|
*
|
|
* @since 11.1
|
|
*/
|
|
public static function utf8_latin_to_ascii($string, $case = 0)
|
|
{
|
|
static $UTF8_LOWER_ACCENTS = null;
|
|
static $UTF8_UPPER_ACCENTS = null;
|
|
|
|
if ($case <= 0)
|
|
{
|
|
if (is_null($UTF8_LOWER_ACCENTS))
|
|
{
|
|
$UTF8_LOWER_ACCENTS = array(
|
|
'à' => 'a',
|
|
'ô' => 'o',
|
|
'ď' => 'd',
|
|
'ḟ' => 'f',
|
|
'ë' => 'e',
|
|
'š' => 's',
|
|
'ơ' => 'o',
|
|
'ß' => 'ss',
|
|
'ă' => 'a',
|
|
'ř' => 'r',
|
|
'ț' => 't',
|
|
'ň' => 'n',
|
|
'ā' => 'a',
|
|
'ķ' => 'k',
|
|
'ŝ' => 's',
|
|
'ỳ' => 'y',
|
|
'ņ' => 'n',
|
|
'ĺ' => 'l',
|
|
'ħ' => 'h',
|
|
'ṗ' => 'p',
|
|
'ó' => 'o',
|
|
'ú' => 'u',
|
|
'ě' => 'e',
|
|
'é' => 'e',
|
|
'ç' => 'c',
|
|
'ẁ' => 'w',
|
|
'ċ' => 'c',
|
|
'õ' => 'o',
|
|
'ṡ' => 's',
|
|
'ø' => 'o',
|
|
'ģ' => 'g',
|
|
'ŧ' => 't',
|
|
'ș' => 's',
|
|
'ė' => 'e',
|
|
'ĉ' => 'c',
|
|
'ś' => 's',
|
|
'î' => 'i',
|
|
'ű' => 'u',
|
|
'ć' => 'c',
|
|
'ę' => 'e',
|
|
'ŵ' => 'w',
|
|
'ṫ' => 't',
|
|
'ū' => 'u',
|
|
'č' => 'c',
|
|
'ö' => 'oe',
|
|
'è' => 'e',
|
|
'ŷ' => 'y',
|
|
'ą' => 'a',
|
|
'ł' => 'l',
|
|
'ų' => 'u',
|
|
'ů' => 'u',
|
|
'ş' => 's',
|
|
'ğ' => 'g',
|
|
'ļ' => 'l',
|
|
'ƒ' => 'f',
|
|
'ž' => 'z',
|
|
'ẃ' => 'w',
|
|
'ḃ' => 'b',
|
|
'å' => 'a',
|
|
'ì' => 'i',
|
|
'ï' => 'i',
|
|
'ḋ' => 'd',
|
|
'ť' => 't',
|
|
'ŗ' => 'r',
|
|
'ä' => 'ae',
|
|
'í' => 'i',
|
|
'ŕ' => 'r',
|
|
'ê' => 'e',
|
|
'ü' => 'ue',
|
|
'ò' => 'o',
|
|
'ē' => 'e',
|
|
'ñ' => 'n',
|
|
'ń' => 'n',
|
|
'ĥ' => 'h',
|
|
'ĝ' => 'g',
|
|
'đ' => 'd',
|
|
'ĵ' => 'j',
|
|
'ÿ' => 'y',
|
|
'ũ' => 'u',
|
|
'ŭ' => 'u',
|
|
'ư' => 'u',
|
|
'ţ' => 't',
|
|
'ý' => 'y',
|
|
'ő' => 'o',
|
|
'â' => 'a',
|
|
'ľ' => 'l',
|
|
'ẅ' => 'w',
|
|
'ż' => 'z',
|
|
'ī' => 'i',
|
|
'ã' => 'a',
|
|
'ġ' => 'g',
|
|
'ṁ' => 'm',
|
|
'ō' => 'o',
|
|
'ĩ' => 'i',
|
|
'ù' => 'u',
|
|
'į' => 'i',
|
|
'ź' => 'z',
|
|
'á' => 'a',
|
|
'û' => 'u',
|
|
'þ' => 'th',
|
|
'ð' => 'dh',
|
|
'æ' => 'ae',
|
|
'µ' => 'u',
|
|
'ĕ' => 'e',
|
|
'œ' => 'oe');
|
|
}
|
|
|
|
$string = str_replace(array_keys($UTF8_LOWER_ACCENTS), array_values($UTF8_LOWER_ACCENTS), $string);
|
|
}
|
|
|
|
if ($case >= 0)
|
|
{
|
|
if (is_null($UTF8_UPPER_ACCENTS))
|
|
{
|
|
$UTF8_UPPER_ACCENTS = array(
|
|
'À' => 'A',
|
|
'Ô' => 'O',
|
|
'Ď' => 'D',
|
|
'Ḟ' => 'F',
|
|
'Ë' => 'E',
|
|
'Š' => 'S',
|
|
'Ơ' => 'O',
|
|
'Ă' => 'A',
|
|
'Ř' => 'R',
|
|
'Ț' => 'T',
|
|
'Ň' => 'N',
|
|
'Ā' => 'A',
|
|
'Ķ' => 'K',
|
|
'Ŝ' => 'S',
|
|
'Ỳ' => 'Y',
|
|
'Ņ' => 'N',
|
|
'Ĺ' => 'L',
|
|
'Ħ' => 'H',
|
|
'Ṗ' => 'P',
|
|
'Ó' => 'O',
|
|
'Ú' => 'U',
|
|
'Ě' => 'E',
|
|
'É' => 'E',
|
|
'Ç' => 'C',
|
|
'Ẁ' => 'W',
|
|
'Ċ' => 'C',
|
|
'Õ' => 'O',
|
|
'Ṡ' => 'S',
|
|
'Ø' => 'O',
|
|
'Ģ' => 'G',
|
|
'Ŧ' => 'T',
|
|
'Ș' => 'S',
|
|
'Ė' => 'E',
|
|
'Ĉ' => 'C',
|
|
'Ś' => 'S',
|
|
'Î' => 'I',
|
|
'Ű' => 'U',
|
|
'Ć' => 'C',
|
|
'Ę' => 'E',
|
|
'Ŵ' => 'W',
|
|
'Ṫ' => 'T',
|
|
'Ū' => 'U',
|
|
'Č' => 'C',
|
|
'Ö' => 'Oe',
|
|
'È' => 'E',
|
|
'Ŷ' => 'Y',
|
|
'Ą' => 'A',
|
|
'Ł' => 'L',
|
|
'Ų' => 'U',
|
|
'Ů' => 'U',
|
|
'Ş' => 'S',
|
|
'Ğ' => 'G',
|
|
'Ļ' => 'L',
|
|
'Ƒ' => 'F',
|
|
'Ž' => 'Z',
|
|
'Ẃ' => 'W',
|
|
'Ḃ' => 'B',
|
|
'Å' => 'A',
|
|
'Ì' => 'I',
|
|
'Ï' => 'I',
|
|
'Ḋ' => 'D',
|
|
'Ť' => 'T',
|
|
'Ŗ' => 'R',
|
|
'Ä' => 'Ae',
|
|
'Í' => 'I',
|
|
'Ŕ' => 'R',
|
|
'Ê' => 'E',
|
|
'Ü' => 'Ue',
|
|
'Ò' => 'O',
|
|
'Ē' => 'E',
|
|
'Ñ' => 'N',
|
|
'Ń' => 'N',
|
|
'Ĥ' => 'H',
|
|
'Ĝ' => 'G',
|
|
'Đ' => 'D',
|
|
'Ĵ' => 'J',
|
|
'Ÿ' => 'Y',
|
|
'Ũ' => 'U',
|
|
'Ŭ' => 'U',
|
|
'Ư' => 'U',
|
|
'Ţ' => 'T',
|
|
'Ý' => 'Y',
|
|
'Ő' => 'O',
|
|
'Â' => 'A',
|
|
'Ľ' => 'L',
|
|
'Ẅ' => 'W',
|
|
'Ż' => 'Z',
|
|
'Ī' => 'I',
|
|
'Ã' => 'A',
|
|
'Ġ' => 'G',
|
|
'Ṁ' => 'M',
|
|
'Ō' => 'O',
|
|
'Ĩ' => 'I',
|
|
'Ù' => 'U',
|
|
'Į' => 'I',
|
|
'Ź' => 'Z',
|
|
'Á' => 'A',
|
|
'Û' => 'U',
|
|
'Þ' => 'Th',
|
|
'Ð' => 'Dh',
|
|
'Æ' => 'Ae',
|
|
'Ĕ' => 'E',
|
|
'Œ' => 'Oe');
|
|
}
|
|
$string = str_replace(array_keys($UTF8_UPPER_ACCENTS), array_values($UTF8_UPPER_ACCENTS), $string);
|
|
}
|
|
|
|
return $string;
|
|
}
|
|
}
|