加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

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

发布时间:2020-05-25 08:43:48 所属栏目:PHP 来源:互联网
导读:可以用ICU完成而不回退到正则表达式吗? 目前我规范化文件名,如下所示: protected function normalizeFilename($filename){ $transliterator = Transliterator::createFromRules( Any-Latin; Latin-ASCII; [:Punctuation:] Remove;

可以用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用户指南的人或人员不应该对做得好的工作表示赞赏.真是一团糟.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读