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

时间:2016-05-13 04:39:28

标签: php file-upload character-encoding

上传具有日文名称的文件时,某些字符会产生问题。 在Windows系统上,我想保存文件的名称as-uploaded。所以我必须使用 mb_convert_encoding($name, "SJIS", "AUTO"); 大部分情况都很好。

尽管如此中的某些字符与0423図表①中的字符完全消失了。似乎上传时文件的名称已经“错误”: 它看起来像"0423å³è¡¨â .pptx"中的UTF-8,如果我用

更改标题字符集
header('Content-Type: text/html; charset=SJIS');

看起来像

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

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

1 个答案:

答案 0 :(得分:1)

使我的答案符合资格(对于downvoter):

  

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

     

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

     

Unicode现在支持超过80,000个CJK字符,工作正常   正在进行编码以进一步添加。国际标准   ISO / IEC 10646和Unicode标准完全同步   曲目和内容。这意味着Unicode具有相同的功能   作为GB 18030的曲目,因为它也与ISO 10646同步    - 虽然有不同的排序和字节格式。

来自:The Unicode Consortium

我的回答:

而不是strpos使用mb_stripos,而不是PHP Multibyte string functions来查找和替换字符。这应该有助于您的脚本检测和翻译非拉丁字符。

如果上传的文件名($_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/

相关问题