PHP音译(PHP Transliteration)

2019-06-18 12:06发布

有没有将所有的外国字符转换为z当量的任一个解决方案? 我已经在谷歌搜索广泛,无法找到一个解决方案,甚至是人物和等价物的清单。 原因是我想与这些字符打交道时,显示了Az唯一的网址,以及其他行程起坐很多。

Answer 1:

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

当字符串“// TRANSLIT”附加到tocode,音译被激活。 这意味着,当一个字符不能在目标字符集表示,可以通过类似于原始字符的一个或多个字符来近似。

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

看到这里为您的使用情况相匹配的完整的例子。



Answer 2:

如果你正在使用的iconv然后确保你的位置设置正确,您尝试音译之前,否则有些字符将无法正确音译

setlocale(LC_CTYPE, 'en_US.UTF8');


Answer 3:

如果你被卡住的开发和发布环境不支持PHP 5.4或更新版本,您应该使用的iconv或自定义的音译库。

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

一个贴解决方案的提到一个自定义库 ,我没有测试。

当我使用Drupal的,我很喜欢他们的音译模块 ,是我最近把它移植,使其可用无Drupal的。


您可以下载它在这里和使用方法如下:

<?php

include "JTransliteration.php";

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

echo $nonmombojombotex;

?>


Answer 4:

这将尽可能多的转换尽可能外文字符(包括西里尔,中国,阿拉伯语等)到他们了Az等价物:

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

你可能想安装的第一个PHP扩展国际机场。



Answer 5:

注:我从希望另一个类似的问题重新发布此,它是帮助他人。

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

https://github.com/jbroadway/urlify

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



Answer 6:

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

}


Answer 7:

对于作曲行家有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


Answer 8:

您查询的问题是,它是做一个很辛苦的事情。 在大多数语言中的所有字形有AZ当量,所有字形具有语音当量(但这些话不是字母),如果你只是处理拉丁语言,然后事情变得更容易一些,但你仍然有东西像我突变问题。

你最好的解决办法是词拿出拼音声音的原油列表 - > AZ等价物,它不会是完美的,但不会对您的具体要求任何更多的信息,就很难制定一个解决方案。



Answer 9:

尼斯库中找到的:

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

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



文章来源: PHP Transliteration