我在哪里可以找到PHP音译器(Intl)的id或规则列表


Where can I find a list of IDs or rules for the PHP transliterator (Intl)?

Transliterator::listIDs()将列出id,但显然它不是一个完整的列表。

在本页的示例中,ID看起来像:

Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove; Lower();

有点奇怪,因为id应该是唯一的。这看起来更像是一个规则,但如果我把它传递给createFromRules方法,它就不起作用了:)

无论如何,我试图从字符串中删除任何标点符号,除了破折号(-)或特定列表中的字符。

你知道这是否可能吗?或者是否有一些文档可以更好地解释音译器的语法?

Transliterator::listIDs()对应的id为"基本id"。你给的例子是一个"复合id"。你可以在上面看到ICU的医生。

您还可以使用Transliterator::createFromRules()创建自己的规则。

你可以看一下预定义的规则:

<?php
$a = new ResourceBundle(NULL, sprintf('icudt%dl-translit', INTL_ICU_VERSION), true);
foreach ($a['RuleBasedTransliteratorIDs'] as $name => $v) {
    $file = @$v['file'];
    if (!$file) {
        $file = $v['internal'];
        echo $name, " (direction $file[direction]; internal)'n";
    } else { 
        echo $name, " (direction: $file[direction])'n";
        echo $file['resource'];
    }
    echo "'n--------------'n";
}

格式化后,结果如下所示:

只是以防有人想要一个工作的例子。上面提到的例子(来自php手册)使用了过程式风格。要使它具有面向对象的样式,请使用create()而不是createFromRules()

removePunctuation($string) {
    $transliterator = Transliterator::create("Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove;", 'Transliterator::FORWARD);
    return $transliterator->transliterate($string);
}