PHP上传的文件名:日语字符编码


PHP Uploaded file name: Japanese character encoding

上传日语名称的文件时,某些字符会产生问题。在windows系统上,我想将文件名保存为已上载文件。所以我必须使用mb_convert_encoding($name, "SJIS", "AUTO");这在大多数情况下都很好。

然而,像0423図表①中的这样的一些字符在最后完全消失了。上传时,文件名称似乎已经"错误":它看起来像UTF-8中的"0423å³è¡¨â .pptx",如果我用更改标题字符集

header('Content-Type: text/html; charset=SJIS');

看起来像

 "0423テ・ツ崢ウティツ。ツィテ「ツ堕.pptx"

我不确定在这种情况下我能做些什么。我试图替换字符,但在编码转换之前或之后,我甚至找不到strpos()

要限定我的答案(向下投票人):

问:我听说UTF-8不支持某些日语字符。这是正确的吗

A: 关于这种支持有很多错误信息中文、日文和韩文(CJK)字符。Unicode标准支持JIS X 0208、JIS X 0212、JIS X中的所有CJK字符0221或JIS X 0213等。这是真的不无论使用哪种Unicode编码形式:UTF-8、UTF-16或UTF-32.

Unicode目前支持超过80000个CJK字符正在对进一步的添加进行编码。国际标准ISO/IEC 10646和Unicode标准在曲目和内容。这意味着Unicode具有相同的曲目与GB 18030相同,因为它也与ISO 10646同步--尽管具有不同的排序和字节格式。

发件人:Unicode联盟。

我的答案:

而不是使用strpos使用mb_stripos,从PHP的多字节字符串函数中查找和替换字符。这将有助于您的脚本检测和翻译非拉丁字符。

如果上传的文件名($_FILES['var']['name'])在PHP脚本中已经不正确(来自print_r($_FILES)等输出),那么您需要确保使用accept-charset='UTF-8'(或SJIS等)正确编码HTML表单。我希望您在这方面已经领先于我。

此外,建议在代码顶部添加一些预条件,再次使用在PHP页面顶部添加的PHP mb_函数:

mb_internal_encoding('UTF-8'); //or whatever character set works for you
mb_http_output('SJIS');
mb_http_input('UTF-8');
mb_regex_encoding('UTF-8'); 

失去兴趣:

http://www.unicode.org/reports/tr37/

http://david.latapie.name/blog/shift-jis-utf-8/