给博客搬家后发现wordpress后台多媒体中上传图片时不能用带中文的文件名,否则穿完后会出现红叉,访问生成的URL会出404!
记得之前在Dreamhost上是没有任何问题的,研究了一番后问题是这样出现的:WP的php脚本使用的字符编码是UTF-8,所以上传后生成的文件名字符串也是UTF-8编码的,而主机系统的设置应该是ANSI的(GB2312或GBK之类的),所以导致请求文件名编码与实际文件编码不一致,导致404错误。而之前搬家时搬过来的以前上传的文件没有问题,就是在主机控制面板上的webftp里看到的都是作为ANSI解析的UTF-8字节乱码,而后来上传的图片文件虽然用浏览器访问会404,但在webftp里看着却一切正常,这该死的字符编码问题!
后来搜到了这篇博文:Wordpress中文名附件上传问题的解决方案 http://blog.csdn.net/wonderyl/article/details/5682095
作者的解决方法是通过修改WP上传文件处理代码,将文件名从UTF-8转为GB2312或GBK保存文件,然后再在写入数据库时还原回UTF-8版本,试着修改了一下确实不会再404了,webftp里看见的文件也和之前DH搬过来的一样效果了:(但是,后来发现这样做有些不妥的地方:功能上来说,这样做只是解决了上传时保存的文件名,虽然能正常访问了,但是在多媒体库中删除这样处理过的图片文件时,会导致文件实体不能正常删除的问题,估计是还有其他代码需要做相应的修改,而且,一些相关的其他插件,比如自动添加图片水印的插件,也会因为文件名的问题而不能正常工作。另外就是这种直接hack主体source的做法在日后wordpress更新时也许会导致麻烦,还得重新做一遍修改。
想来想去还是决定放弃这种方式了,等着哪天wordpress更新这个兼容小bug吧还是。但这么放弃了又不是很甘心,每次用QQ截图完了,还得删掉文件名里的中文再上传,很是麻烦。好在没一会儿我就找到了这么一个插件:uploading downloading non-latin filename http://wordpress.org/extend/plugins/uploadingdownloading-non-latin-filename/ 作者是个同样深受编码之苦的韩国人,呵呵。
这个插件能在上传图片时自动重命名保存文件的文件名,并将原文件名作为标题保存,这样一来总算是能折衷的解决这恶心的编码问题了,试了一下水印插件也OK了。
博主友情提示:
如您在评论中需要提及如QQ号、电子邮件地址或其他隐私敏感信息,欢迎使用>>博主专用加密工具v3<<处理后发布,原文只有博主可以看到。