服务报价 | 域名主机 | 网络营销 | 软件工具| [加入收藏]
 热线电话: #
当前位置: 主页 > php教程 > magento教程 >

magento 解决上传文件名不能为中文的问题

时间:2016-01-10 02:40来源: 作者: 点击:
我在写magento一个上传文件模块的时候,发现当我将文件名命名为中文时,存储的文件居然为 file.jpg . 虽然在数据库里面,显示正常,读取数据库也是正常的,但是当读取实际文件(按上

我在写magento一个上传文件模块的时候,发现当我将文件名命名为中文时,存储的文件居然为 file.jpg .

虽然在数据库里面,显示正常,读取数据库也是正常的,但是当读取实际文件(按上传的定义的文件名)时,“ not found !”

几经辗转,问题定位到 var/file/uploader.php 文件中 getCorrectFileName 函数

代码如下:

 

[php] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. static public function getCorrectFileName($fileName)  
  2.     {  
  3.           
  4.         $fileName = preg_replace('/[^a-z0-9_\\-\\.]+/i''_'$fileName);  
  5.         $fileInfo = pathinfo($fileName);  
  6.   
  7.         if (preg_match('/^_+$/'$fileInfo['filename'])) {  
  8.             $fileName = 'file.' . $fileInfo['extension'];  
  9.         }  
  10.         return $fileName;  
  11.     }  

将函数修改为

 

 

[css] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. static public function getCorrectFileName($fileName)  
  2.     {  
  3.       
  4.        $fileName = preg_replace('/[^a-z0-9\x{4e00}-\x{9fa5}_\\-\\.]+/ui''_', $fileName);  
  5.           
  6.         $fileInfo = pathinfo($fileName);  
  7.   
  8.         if (preg_match('/^_+$/', $fileInfo['filename'])) {  
  9.             $fileName = 'file.' . $fileInfo['extension'];  
  10.         }  
  11.         return $fileName;  
  12.     }  

问题得以完美解决!

$fileName = preg_replace('/[^a-z0-9\x{4e00}-\x{9fa5}_\\-\\.]+/ui', '_', $fileName);

注意 红色加粗的代码,那一行代码是关键,正则表达式

'/[\x{4e00}-\x{9fa5}]+/u/' 就是匹配中文的正则,\x{nnnn} 表示字符的十六进制形式,更多信息查看php手册,请特别注意模式修饰符 u, php手册中说 u启用一个pcre中的peal不兼容的额外功能,该模式字符串被当成UTF8,改修饰符在UNIX系统中自 php 4.1启用。另:在 utf8环境中用元字符匹配字符串最好加上修饰符 u,经验之谈。(责任编辑:最模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容