Vla*_*sny 6 php transliteration icu
可以用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;
}
Run Code Online (Sandbox Code Playgroud)
我可以在这里摆脱正则表达式并使用ICU呼叫做所有事情吗?
我现在所做的事情没有任何问题.
ICU音译首先是语言导向.它试图保持意义.
另一方面,正则表达式可以详细操作字符,从而确保文件名仅限于所选字符.
在这种情况下,这种组合是完美的.
当然,我已经找到了解决问题的方法.但说实话,我找不到适用于所有可能输入的东西.
例如,并非所有字符,我们都会考虑标点符号,被删除[:Punctuation:] Remove;.试试俄语名称:?????????, ??????.申请后,id它变为:Kornil?ev Kirill.显然,这不是标点符号,但您不希望它在您的文件名中.
所以我建议使用正确的工具:
Latin-ASCII;按照惯例使用id.很好,很简单.这真的没有错.
PS:就我个人而言,我认为编写ICU用户指南的人或人员不应该对做得好的工作表示赞赏.真是一团糟.
| 归档时间: |
|
| 查看次数: |
914 次 |
| 最近记录: |