Php ICU:音译,然后删除所有非字母数字字符
在不回到regex的情况下,可以通过ICU完成吗 目前我规范化文件名,如下所示:Php ICU:音译,然后删除所有非字母数字字符,php,icu,transliteration,Php,Icu,Transliteration,在不回到regex的情况下,可以通过ICU完成吗 目前我规范化文件名,如下所示: protected function normalizeFilename($filename) { $transliterator = Transliterator::createFromRules( 'Any-Latin; Latin-ASCII; [:Punctuation:] Remove;' ); $filename = $transliterator->tra
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音译首先是面向语言的。它试图保留意义
另一方面,正则表达式可以详细操作字符,从而确保文件名仅限于选定的字符
在这种情况下,组合是完美的
当然,我一直在寻找解决你问题的办法。但老实说,我找不到对所有可能的输入都有效的东西
例如,并不是所有的字符,我们都会考虑标点符号,通过<代码> [标点::]删除;代码>。试试俄文名称:
kerkццц,kerkццц
。应用id
后,它将变成:Kornilʹev Kirill
。很明显,这不是标点符号,但您不希望它出现在文件名中
因此,我建议在工作中使用正确的工具:
拉丁ASCII代码>如id
所示。又好又简单
附言:就个人而言,我认为撰写ICU用户指南的人不应该因为工作出色而受到赞扬。真是一团糟 只有50岁?这个问题会让人大吃一惊,然后才50岁?让它变成200…@Ultradev我怀疑提高奖金会增加知道答案的程序员的数量;)不知道这是否仍然相关,但您可以在规则集本身中指定字符类:
'Any-Latin;拉丁ASCII码;[^A-Za-z0-9]拆除;'你能解释一下为什么[:点状:]不包括标点符号类别中的引号和撇号吗?@wtorsi这是对这个答案的评论,还是一个新问题?在我看来,似乎是后者。在这种情况下,最好问一个新问题。如果你这样做了,别忘了记录你的陈述。