开发者社区> 问答> 正文

PHPSDK对中文的处理是不是有问题(版本v1.1.6)

关键字:  upload_file_by_file, utf-8, object_name

我用这个 SDK 写了个 WordPress 的插件,由于自己用的 ACE,不需要这个 SDK,所以一直没发现这个问题


直到最近有两个人给我反馈无法上传中文名的文件,我想可能是编码问题,仔细的测试个自己的代码,没发现问题
然后我跟踪一下 SDK 里的代码,瞬间凌乱了。。。。。


见 sdk.class.php line 1290


/**
     * 上传文件,适合比较大的文件
     */
    public function upload_file_by_file($bucket, $object, $file, $options = NULL){
                // ..... 省略 ......
        if($this->chk_chinese($file)){
            $file = iconv('utf-8','gbk',$file);
        }
        // ..... 省略 .....
    }


只判断包含中文就转 GBK,并没有检测输入字串是不是 utf8。这个倒是可以理解,因为或许在某个地方已经判断过了(我没通看源码,所以自我安慰一下,哈哈~),不过为什么要转成 GBK 呢?


在另一个地方有如下代码 line 2575


/**
     * 检验object名称是否合法
     * object命名规范:
     * 1. 规则长度必须在1-1023字节之间
     * 2. 使用UTF-8编码
     */
    private function validate_object($object){
        $pattern = '/^.{1,1023}$/';
        if (empty ( $object ) || ! preg_match ( $pattern, $object )) {
            return false;
        }
        return true;
    }


这个到底是不是 BUG 啊?反正如果文件名有中文 报错是妥妥的,注释掉这3行,不转 GBK 反倒是没什么问题了。

为了解决用户们的问题,我对 line 1290 做了简单的修改

if($this->chk_chinese($file) && $this->is_gb2312($file)){
      $file = iconv('gbk','utf-8',$file);
    }
呼叫大大,快来看一下,改 SDK 什么的总还是有一点会觉得心虚,以后升个级什么的会不会就蛋疼了

PS:  check_char() 和 is_gb2312() 两个方法的代码是不是有点太神似了,这样真的好吗~

有些时间没怎么写 php 了,本来底子也不好,要是我说错了什么,请各位不要笑哈~ 今天太晚了,回头我会抽空把 SDK 通看一遍的

展开
收起
mushi 2015-01-19 02:07:47 7729 0
2 条回答
写回答
取消 提交回答
  • RePHPSDK对中文的处理是不是有问题(版本v1.1.6)
    哈哈哈,我来顶一下小虫~~~
    2015-01-23 14:10:08
    赞同 展开评论 打赏
  • 阿里云对象存储(OSS)开发工程师
    RePHPSDK对中文的处理是不是有问题(版本v1.1.6)
    这里的确是有问题的,没有适应windows和linux对编码的要求,后续的sdk升级会解决这个问题
    2015-01-22 19:52:50
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载