php – ICU:Transliterate然后删除所有非字母数字字符

前端之家收集整理的这篇文章主要介绍了php – ICU:Transliterate然后删除所有非字母数字字符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
可以用ICU完成而不回退到正则表达式吗?

目前我规范化文件名,如下所示:

protected function normalizeFilename($filename)
{
    $transliterator = Transliterator::createFromRules(
        'Any-Latin; Latin-ASCII; [:Punctuation:] Remove;'
    );
    $filename = $transliterator->transliterate($filename);
    $filename = preg_replace('/[^A-Za-z0-9_]/','',$filename);
    return $filename;

}

我可以在这里摆脱正则表达式并使用ICU呼叫做所有事情吗?

使用正确的工具完成工作

我现在所做的事情没有任何问题.

ICU音译首先是语言导向.它试图保持意义.

另一方面,正则表达式可以详细操作字符,从而确保文件名仅限于所选字符.

在这种情况下,这种组合是完美的.

当然,我已经找到了解决问题的方法.但说实话,我找不到适用于所有可能输入的东西.

例如,并非所有字符,我们都会考虑标点符号,被[:标点符号:]删除;请尝试俄语名称:Корнильев,Кирилл.申请你的身份后,它变成了:Kornil’ev Kirill.显然,这不是标点符号,但您不希望它在您的文件名中.

所以我建议使用正确的工具:

>使用ICU获得最佳ASCII参数.仅使用Latin-ASCII;正如id会做的那样.很好,很简单.
>然后使用正则表达式,就像你一样,确保你只剩下你需要的字符.

这真的没有错.

PS:就我个人而言,我认为编写ICU用户指南的人或人员不应该对做得好的工作表示赞赏.真是一团糟.

猜你在找的PHP相关文章