返回顶部

[文摘] WordPress 上传中文文件名的图片无法显示(附解决办法)

[复制链接]
awagink 显示全部楼层 发表于 2009-12-18 20:27:07 |阅读模式 打印 上一主题 下一主题
情况如图所示。
b97efb10-4ac0-4630-9440-e5376d8918d6.jpg
不管是纯中文文件名还是中文与字母混合的文件名,上传后都无法显示。
可能的原因:
1、WP处理UNICODE字符的相关函数存在缺陷
     从反馈的结果看,WP是可以将汉字转换成UNICODE字符的,但是转换正确与否,尚未验证。
2、操作系统本身 的问题
    本屋服务器操作系统系Debian 3.1 。众所周知,unix系统是ASCII编码的天下,一向对汉字这样的“双字节”符号支持不完善。
3、Apache HTTP Server 的问题
   本屋的HTTP 服务软件系Apache 2.0.54。GOOLGE到的信息告诉我:Apache2在linux下有支持中文URL的缺陷。
PS. 根据APACHE 的日志文件显示,中文文件名图片会产生 HTTP 404错误,看来真的是APACHE的问题。
目前网上提供的解决方案有:
   a. 增加 AddDefaultCharset GB2312 —— 经测试无效,这个只影响页面输出的缺省编码,但是页面应该是自己指定编码的,由Server指定不符合逻辑,尤其存在Virtual Server的情况下;
  
   b. 取消IE始终使用UTF-8传送URL —— 经测试有效,但是又不能强迫所有客户端修改IE配置,而且是IE的缺省配置
问题原因:
   a. 文件上传时,apache的上传模块传递的文件名是不经过编码的,即使用ISO8859-1编码,并以此编码的文件名保存之;
   b. 如果由apache自己生成该文件的URL,则中文文件名是经过urlencode处理过的,此时下载正常,但是在弹出对话框的保存文件名中中文出现乱码;
   c. 如果由程序用此中文名直接生成URL,由于IE使用UTF-8传递URL,因此中文会首先被转成UTF-8,然后经urlencode处理;Apache受到后还原为UTF-8的文件名,无法找到用ISO8859-1编码的对应的文件;
解决方法:
   a. 文件上传后保存时一般由cgi完成处理,因此在此时保存为UTF-8编码的文件名;例如在php中采用:

CODE:

copy($tmpFile, iconv(”gb2312″, “utf-8″, $FileName));


前提是php支持iconv;
   b. 生成URL时,也采用此种方法,用iconv转码后再urlencode;
   c. Apache2无法支持空格的urlencode结果“+”,要替换成“%20”
以上步骤a、b、c必须同时存在,或者只采取步骤a也可,取消b、c,直接用中文做URL,由IE做转码和urlencode,此时空格不会翻译成“+” (why?)
结果
   1. 中文文件名的文件正常下载;
   2. 保存文件的对话框显示正确;
缺点
   在linux上保存的文件名是UTF-8的,在没有设定系统是此种编码时,显示为乱码。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

纳速健身网成立于2006年8月,是国内优秀健身运动网站,现拥浏览人数超30万。网站是集养生、武术、太极拳和健身气功等多种健身项目于一体的多功能交流平台。平台提供大量优质的教学视频、伴奏音乐(太极拳晨练音乐,广场舞音乐,健身气功音乐)、图文教程、运动科普和经验分享,为健身爱好者提供完善的运动指导平台。
  • 纳速QQ群乙:151815303
  • 纳速QQ群丙:79104490
  • 微信交流群:微信好友搜索【nasuwang】加小纳微信进群交流健身知识,备注【纳速】
  •                     或者扫描页面底部右侧二维码添加小纳微信>>>
  • 微信公众号

  • 微信群客服交流

  • Copyright © 2006-2021, 纳速健身网. | | 辽ICP备13002388号-1 辽公安网备21050202000005号公安网备号 纳速武术-乙 QQ