上传日语名称的文件时,某些字符会产生问题。在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/