php transliteration

Transliteración de PHP



transliteration (9)

¿Hay alguna solución que convierta todos los caracteres extranjeros a equivalentes de Az? He buscado mucho en Google y no pude encontrar una solución o incluso una lista de caracteres y equivalentes. La razón es que quiero mostrar URL solo de Az, además de muchas otras mejoras de viaje cuando se trata de estos caracteres.



El problema con su consulta es que es algo muy difícil de hacer. No todos los glifos en la mayoría de los idiomas tienen equivalentes az, todos los glifos tienen equivalentes fonéticos (pero estas son palabras y no letras), si solo se trata de idiomas basados ​​en el latín, entonces las cosas son un poco más fáciles pero todavía tiene problemas con cosas como la mutación I .

Su mejor solución es crear una lista de sonidos fonéticos -> equivalentes, no será perfecto, pero sin más información sobre sus requisitos exactos, es difícil desarrollar una solución.


Esto convertirá tanto como sea posible los caracteres extranjeros (incluyendo el cirílico, chino, árabe, etc.) a sus equivalentes en Az:

$AzString = transliterator_transliterate(''Any-Latin;Latin-ASCII;'', $foreignString);

Es posible que desee install primero la extensión PHP Intl.


Nota: estoy distribuyendo esto de otra pregunta similar con la esperanza de que sea útil para otros.

Terminé escribiendo una biblioteca de PHP basada en URLify.js del proyecto Django, ya que encontré que iconv () estaba demasiado incompleto. Lo puedes encontrar aquí:

https://github.com/jbroadway/urlify

Maneja caracteres latinos, así como griego, turco, ruso, ucraniano, checo, polaco y letón.


Puedes usar iconv , que tiene una codificación de transliteración especial.

Cuando la cadena "// TRANSLIT" se agrega a tocode, se activa la transliteración. Esto significa que cuando un carácter no se puede representar en el conjunto de caracteres objetivo, se puede aproximar a través de uno o varios caracteres que se parecen al carácter original.

- http://www.gnu.org/software/libiconv/documentation/libiconv/iconv_open.3.html

Vea aquí un ejemplo completo que coincide con su caso de uso.


Si está atascado con un entorno de desarrollo y lanzamiento que no es compatible con PHP 5.4 o más reciente, debe usar iconv o una biblioteca de transliteración personalizada.

En el caso de iconv, me resulta extremadamente inútil, especialmente si se usa en alfabetos árabe o cirílico. Iría para una clase de transliteración incorporada de PHP 5.4 o una clase de transliteración personalizada.

Una de las soluciones publicadas mencionó una biblioteca personalizada que no probé.

Cuando estaba usando Drupal, me encantó su módulo de transliteración , que recientemente lo porté para que sea utilizable sin Drupal.


Puedes descargarlo here y usarlo de la siguiente manera:

<?php include "JTransliteration.php"; $mombojombotext = "誓曰:『時日害喪?予及女偕亡。』民欲與之偕亡,雖有"; $nonmombojombotex = JTransliteration::transliterate($mombojombotext); echo $nonmombojombotex; ?>


Si está usando iconv, asegúrese de que su configuración regional esté configurada correctamente antes de probar la transliteración, de lo contrario, algunos caracteres no se transcribirán correctamente

setlocale(LC_CTYPE, ''en_US.UTF8'');


para los compositores adeptos hay slugify

https://github.com/cocur/slugify

use Cocur/Slugify/Slugify; $slugify = new Slugify(); echo $slugify->slugify(''Hello World!''); // hello-world //You can also change the separator used by Slugify: echo $slugify->slugify(''Hello World!'', ''_''); // hello_world //The library also contains Cocur/Slugify/SlugifyInterface. Use this interface whenever you need to type hint an instance of Slugify. //To add additional transliteration rules you can use the addRule() method. $slugify->addRule(''i'', ''ey''); echo $slugify->slugify(''Hi''); // hey


<?php /** * @author bulforce[]gmail.com # 2011 * Simple class to attempt transliteration of bulgarian lating text into bulgarian cyrilic text */ // Usage: // $text = "yagoda i yundola"; // $tl = new Transliterate(); // echo $tl->lat_to_cyr($text); //ягода и юндола class Transliterate { private $cyr_identical = array("а", "б", "в", "в", "г", "д", "е", "ж", "з", "и", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ъ", "я"); private $lat_identical = array("a", "b", "v", "w", "g", "d", "e", "j", "z", "i", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", "y", "q"); private $cyr_fricative = array("ж", "ч", "ш", "щ", "ц", "я", "ю", "я", "ю"); private $lat_fricative = array("zh", "ch", "sh", "sht", "ts", "ia", "iu", "ya", "yu"); public function __construct() { $this->identical_to_upper(); $this->fricative_to_variants(); } public function lat_to_cyr($str) { for ($i = 0; $i < count($this->cyr_fricative); $i++) { $c_cyr = $this->cyr_fricative[$i]; $c_lat = $this->lat_fricative[$i]; $str = str_replace($c_lat, $c_cyr, $str); } for ($i = 0; $i < count($this->cyr_identical); $i++) { $c_cyr = $this->cyr_identical[$i]; $c_lat = $this->lat_identical[$i]; $str = str_replace($c_lat, $c_cyr, $str); } return $str; } private function identical_to_upper() { foreach ($this->cyr_identical as $k => $v) { $this->cyr_identical[] = mb_strtoupper($v, ''UTF-8''); } foreach ($this->lat_identical as $k => $v) { $this->lat_identical[] = mb_strtoupper($v, ''UTF-8''); } } private function fricative_to_variants() { foreach ($this->lat_fricative as $k => $v) { // This handles all chars to Upper $this->lat_fricative[] = mb_strtoupper($v, ''UTF-8''); $this->cyr_fricative[] = mb_strtoupper($this->cyr_fricative[$k], ''UTF-8''); // This handles variants // TODO: fix the 3 leter sounds for ($i = 0; $i <= count($v); $i++) { $v[$i] = mb_strtoupper($v[$i], ''UTF-8''); $this->lat_fricative[] = $v; if ($i == 0) { $this->cyr_fricative[] = mb_strtoupper($this->cyr_fricative[$k], ''UTF-8''); } else { $this->cyr_fricative[] = $this->cyr_fricative[$k]; } $v[$i] = mb_strtolower($v[$i], ''UTF-8''); } } } }