PHP音译

有没有解决scheme可以将所有外来字符转换为Az等价物? 我已经在Google上进行了大量search,找不到解决scheme,甚至找不到字符和等价物的列表。 原因是我想要显示只有url,加上大量的其他行程时处理这些字符。

你可以使用iconv ,它有一个特殊的音译编码。

当string“// TRANSLIT”被附加到代码时,音译被激活。 这意味着当一个字符不能在目标字符集中表示时,它可以通过一个或几个与原始字符相似的字符来近似。

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

请参阅此处查看与您的用例相匹配的完整示例。

如果您使用的是iconv,那么在尝试音译之前,请确保您的语言环境设置正确,否则某些字符将无法正确音译

 setlocale(LC_CTYPE, 'en_US.UTF8'); 

如果您遇到不支持PHP 5.4或更高版本的开发和发布环境,则应使用iconv或自定义的Transliteration库。

在iconv的情况下,我觉得这是非常无益的,特别是使用阿拉伯语或西里尔字母。 我会去一个PHP 5.4内置的Transliteration类或一个自定义的Transliteration类。

其中一个解决scheme提到了一个我没有testing的自定义库 。

当我使用Drupal的时候,我喜欢他们的音译模块 ,我最近把它移植到了没有Drupal的情况下。

您可以在这里下载并使用,如下所示:

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

注意:我从另一个类似的问题转贴这个,希望对别人有所帮助。

我最终编写了一个基于Django项目中的URLify.js的PHP库,因为我发现iconv()太不完整。 你可以在这里find它:

https://github.com/jbroadway/urlify

处理拉丁文字符以及希腊文,土耳其文,俄文,乌克兰文,捷克文,波兰文和拉脱维亚文。

这将尽可能地将外国字符(包括西里尔文,中文,阿拉伯文等)转换为它们的Az等价物:

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

您可能需要首先安装 PHP Intl扩展。

 <?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'); } } } } 

您的查询的问题是,这是一个非常艰难的事情。 在大多数语言中,并非所有的字形都有az等价forms,所有的字形都有相应的语音forms(但是这些字母不是字母),如果您只是处理基于拉丁语的语言,那么事情就会简单一些,但是您仍然遇到像I-突变。

你最好的解决scheme是提出一个粗略的语音声音列表 – > az等价,它不会是完美的,但没有任何更多的信息对你的确切要求很难开发出一个解决scheme。

对于composer php来说,这是一场暴风雨

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 

好的图书馆在:

1) https://github.com/ashtokalo/php-translit (许多语言,但是,缺乏一些语言)

2) https://github.com/fre5h/transliteration (仅适用于俄语和乌克兰语)

Interesting Posts