2

我有清理 URL 和文件名的功能,它可以很好地处理字符,éáßöäü比如eassoau使用str_replace($a, $b, $value). 但是如何替换中文、日文……语言中的所有字符?如果因为不容易确定而无法替换,我该如何删除所有这些字符?当然,我可以先像上面一样对其进行消毒,然后删除所有“非拉丁”字符。但也许还有另一个好的解决方案?

编辑/添加

正如评论中所问:我的问题的目的是什么?我们有一个客户,一开始有英语、德语和俄语的内容。后来出现了一些中文页面。URL 出现了两个问题:

  • 第一个消毒剂杀死了所有“非ASCII字符”并可能返回“空白”(无效)清洁URL
  • 客户体验到在某些带有中文字符的浏览器干净的 URL 中不起作用

第一点让我找到了替换这些字符的镜头,当然,正如问题中所述,评论证实了这一点,这是不可能的。也许现在有人回答说,在所有现代浏览器(从 IE8 开始)中,这不再是问题了。我也很高兴听到这个消息。

4

3 回答 3

2

您可以通过现有的消毒剂运行它,然后任何不是拉丁语的,您都可以转换为punycode

于 2012-08-06T16:07:00.303 回答
2

至于日语,例如,通常有一个罗马字表示,它只使用 ascii 字符,并且仍然给出原始字符的可逆和可理解的表示。但是,将某些内容翻译成罗马字需要您知道正确的发音,这通常取决于使用字符的含义或上下文。这使得即使不是不可能简单地正确转换所有内容也很难(或者至少对于简单的消毒剂来说不是有效可行的)。

这同样适用于中国人,甚至更糟。另一方面,韩语有一个非常简单的字符集,应该很容易翻译成罗马表示。另一个常见的问题是没有单一的罗马化方法。这些语言通常有不同的人使用的不同的语言(例如日语有两种常见的罗马字)。

因此,这实际上取决于您使用的实际语言;虽然您可能能够使其适用于某些语言,但另一个问题是检测您实际使用的是哪种语言(例如,日语和中文共享许多字符,但含义、发音和罗马化通常不兼容)。特别是对于文件名的简单清理,我认为不值得投入如此多的工作和处理时间。

也许你应该换个方向工作:让你的文件名简单地作为 unicode 文件名工作。实际上,文件系统中真正无效的字符很少(*|\/:"<>?),因此将它们简单地过滤掉并支持 unicode 文件名会更容易。

于 2012-08-06T16:55:44.393 回答
1

因此,据我了解,您需要为每种语言提供一些字符关系表,并在此表中用关系替换字符。
例如,对于将俄语符号转译为拉丁同义词,我们使用此表 =) 或使用此表的类 =)
这很有趣,我现在找到了http://derickrethans.nl/projects.html#translit

于 2012-08-06T16:16:56.103 回答