Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 清理/替换所有日文、中文、韩文、俄文等字符_Php_Regex - Fatal编程技术网

Php 清理/替换所有日文、中文、韩文、俄文等字符

Php 清理/替换所有日文、中文、韩文、俄文等字符,php,regex,Php,Regex,我有一个清理URL和文件名的函数,它可以很好地处理字符,比如ßáßöäü,因为它使用stru replace($a,$b,$value)将它们替换为eassoau等。但是我怎样才能替换所有来自汉语、日语……语言的字符呢?如果因为不容易确定而无法替换,如何删除所有这些字符?当然,我可以先像上面那样清理它,然后删除所有“非拉丁”字符。但也许还有另一个好的解决办法 编辑/添加 正如评论中所问:我的问题的目的是什么?我们有一个客户,最初的内容是英语、德语和俄语。后来出现了一些中文页面。URL出现了两个问

我有一个清理URL和文件名的函数,它可以很好地处理字符,比如
ßáßöäü
,因为它使用
stru replace($a,$b,$value)
将它们替换为
eassoau
等。但是我怎样才能替换所有来自汉语、日语……语言的字符呢?如果因为不容易确定而无法替换,如何删除所有这些字符?当然,我可以先像上面那样清理它,然后删除所有“非拉丁”字符。但也许还有另一个好的解决办法

编辑/添加

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

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

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

你可以通过你现有的消毒剂来运行它,然后任何非拉丁语的东西,你都可以转换成,所以,据我所知,你需要一些每种语言的字符关系表,并在这个表中用关系替换字符。
例如,对于将俄语符号翻译成拉丁同义词,我们使用表=)或类,它们使用表=)

这很有趣,我现在发现它

至于日语,作为一个例子,通常所有东西都有一个罗马式的表示法,它只使用ascii字符,并且仍然提供原始字符的可逆和可理解的表示法。然而,将某些东西翻译成罗马语需要知道正确的发音,这通常取决于字符的含义或使用的上下文。这使得很难,如果不是不可能的话,简单地将所有的东西正确地转换(或者至少对于一个简单的消毒剂来说不是有效可行的)

中国人也是如此,情况更糟。另一方面,韩语有一个非常简单的字符集,应该可以很容易地翻译成罗马表示。但另一个常见的问题是,没有单一的罗马化方法;这些语言通常有不同的语言供不同的人使用(例如日语有两种常见的罗马化)

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


也许您应该朝着另一个方向工作:让您的文件名简单地用作unicode文件名。实际上,在文件系统中,只有极少数字符是真正无效的(
*\124;\/:“?
)因此,只需将这些字符过滤掉并以其他方式支持unicode文件名就更容易了。

如果您想确保只将允许的字符列入白名单?您在一定程度上承认可能无法替换这些字符,但当您明确提到中文或日文时:您希望这些字符能够被替换吗ed with?与
相反,没有用ASCII字符替换中文或日文字符的通用定义明确的惯例。你能重申一下你的问题吗?这有什么用?非常感谢你的评论。我更新了我的答案。希望它能更好地理解我想问的问题。谢谢为了确认我对转换的想法。我不明白为什么不。我假设他需要删除unicode,并限制为ascii字符。Punycode是一种可逆的方法,因此原始文件名可以在服务器或客户端需要时以可编写脚本的方式放回。我始终认为,Punycode只用于域名,但没有一个例外w将其用于文件名。但这不是作者想要的问题。谢谢你的回答-在url上听起来很有趣。我想我会试一试。可逆性意味着你可以将url存储在punycode中,然后如果人们使用unicode搜索,你也可以将他们的搜索转换为punycode url。谢谢你链接到translit。这似乎非常强大,但不幸的是,我们无法安装扩展。在第一部分中,您提到了转换表。不知怎的,链接丢失了,还是您指的是Translatit使用的表?@insertusernamehere,这里是此类的示例,它很旧,但我们对其原理感兴趣。如果您我有所有非拉丁符号的表格,你可以更改它们。非常感谢你确认我的想法和这个写得很好的答案。我想我会在文件名上使用UTF8编码。