上传具有日文名称的文件时,某些字符会产生问题。
在Windows系统上,我想保存文件的名称as-uploaded。所以我必须使用
mb_convert_encoding($name, "SJIS", "AUTO");
大部分情况都很好。
尽管如此①
中的某些字符与0423図表①
中的字符完全消失了。似乎上传时文件的名称已经“错误”:
它看起来像"0423å³è¡¨â .pptx"
中的UTF-8
,如果我用
header('Content-Type: text/html; charset=SJIS');
看起来像
"0423テ・ツ崢ウティツ。ツィテ「ツ堕.pptx"
我不确定在这种情况下我能做些什么。我尝试替换①
字符,但在编码转换之前或之后我甚至无法使用strpos()
找到它。
答案 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同步 - 虽然有不同的排序和字节格式。
我的回答:
而不是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/
和