可以使用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音译首先是面向语言的。它试图保留意义。
另一方面,正则表达式可以详细处理字符,从而确保文件名仅限于所选字符。
在这种情况下,这种组合是完美的。
我当然已经在寻找解决您问题的方法。但老实说,我找不到所有可能的输入都适用的东西。
例如,并非所有字符(我们都会考虑使用标点符号)都被删除了[:Punctuation:] Remove;
。尝试使用俄语名称:Корнильев, Кирилл
。应用后,id
它变为:Kornilʹev Kirill
。显然,这不是标点符号,但您不希望它出现在文件名中。
因此,我建议为工作使用正确的工具:
Latin-ASCII;
的id
就行了。漂亮又简单。确实没有错。
PS:就我个人而言,我认为撰写ICU用户指南的人不应称赞做得好的工作。真是一团糟。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句