完美解决drupal6上传中文文件名附件乱码问题

原文地址:
http://www.5iphp.com/zh-hans/heart/180.html

drupal6的upload模块只能上传英文名字的文件,我经过一段时间的测试,完美解决了drupal下中文文档上传的问题。

其实文档上传,无非涉及到两个方面。

第一:文档存到数据库中的名字。

第二:文档上传后存到服务器的文件夹里的名字。

这两个名字如果都是中文的名字,问题就解决了。

根据以上的设想,我开始修改file.inc文件。

为什么要修改这个文件呢?

因为文件的上传是用到upload.module的upload_node_form_submit(&$form, &$form_state)这个函数是管上传的。

但是这个函数上传主要用到了函数里面的这句代码

if (($user->uid != 1 || user_access('upload files')) && ($file = file_save_upload('upload', $validators, file_directory_path())))

也就是 file_save_upload函数才是最终的上传函数。而file_save_upload函数就是在file.inc这个文件里。

所以我们其实就是修改file.inc这个文件里的file_save_upload函数。

修改两个地方就可以

第一个地方,管数据库文件名字的

语句是: $file->filename = file_munge_filename(trim(basename($_FILES['files']['name'][$source]), '.'), $extensions);

修改后:$file->filename = file_munge_filename(trim($_FILES['files']['name'][$source], '.'), $extensions);

第二个地方,管上传到服务器的文件夹里的文件名字的。

原句是:if (!move_uploaded_file($_FILES['files']['tmp_name'][$source], $file->filepath))

修改后:if (!move_uploaded_file($_FILES['files']['tmp_name'][$source],iconv("UTF-8","gb2312",$file->filepath)))

我试了下。。。可以

我试了下。。。可以上传中文附件呀???只是上传了后系统会帮你改掉文件名。。

       http://www.leike2.com/
δδδδ技术活做累了,点上面的网址轻松娱乐一下!δδδδ

哦,我的是drupal6.4下的upload模块

哦,我的是drupal6.4下的upload模块,上传附件不能用中文,用中文就是乱码,不清楚你的那个模块是什么?
能否告之?
==============a scratch of pen of jason==================
www.5iphp.com 关于drupal学习、drupal经验、drupal教程的网站

www.5iphp.com 关于drupal学习、drupal经验、drupal教程的网站

转gb2312? UTF-8比较好吧

转gb2312? UTF-8比较好吧

怎么样转,看你自己的方便吧

我只是说明一下原理呵呵
==============a scratch of pen of jason==================
www.5iphp.com 关于drupal学习、drupal经验、drupal教程的网站

www.5iphp.com 关于drupal学习、drupal经验、drupal教程的网站

为什么要上传中文的

为什么要上传中文的附件啊,安装个transliteration 模块,直接把中文的附件名字转成拼音之类的也满好的。

########## AD ################
http://www.petkk.com

最近新开的drupal6.x的子站,主要以学习为主,欢迎大家来交流
http://code.petkk.com

########## AD ################

主要以学习为主,欢迎大家来交流
http://playts.com

推 transliteration

是的, 用 transliteration 就好了, 上傳檔名不只 gb2312編碼會有問題, big5 也會有問題
transliteration 可以適用任何語系上

transliteration 模块

transliteration 模块 对fckeditor中直接上传中文名图片或中文名文件不起作用,还是乱码,需要外挂imce,可是觉得imce的操作显得很繁琐,LZ提供的方法要去试一下,如果可以就可以简化客户端操作了,可以把imce拿掉了。
-----拓展生活,共享闲适与激越!-----
-------------You8.cn-------------

-----拓展生活,共享闲适与激越!-----
-------------You8.cn-------------

这个模块没用过,呵呵

回头装上用用!
==============a scratch of pen of jason==================
www.5iphp.com 关于drupal学习、drupal经验、drupal教程的网站

www.5iphp.com 关于drupal学习、drupal经验、drupal教程的网站

我用了一个另类的方

我用了一个另类的方法。在图片上传模块里用urlencode编了下码,上传后发现保存到数据库的文件名很正常,没有乱码。不过这个法子还没有广泛测试。

<?php
$title
= current(explode('.',urlencode($_FILES['files']['name']['images'])));//中文drupal社区.jpg
$file->title = urldecode($title);//中文drupal社区
?>

------
博客 | 图片上传

------
Blog

我觉得这个方法也应该可以

我觉得这个方法也应该可以
==============a scratch of pen of jason==================
www.5iphp.com 关于drupal学习、drupal经验、drupal教程的网站

www.5iphp.com 关于drupal学习、drupal经验、drupal教程的网站