測試環境:
Ubuntu 6.10
apache2
php5
postgresql 8.1
Drupal 5.1
我不知道真正解決問題的key point在哪
但確實可以傳中文檔名,而且上傳到server上也是中文,下載也沒問題
先post整個過程,希望板上同好,在try的時候可以協助找出問題點
1.修正postgresql的client端語系
a.先確認資料庫的編碼為UTF8
b.修改資料庫的client端連結屬性
修改/etc/postgresql/8.1/main/postgresql.conf
加入下面這行
client_encoding = utf8
存檔後重新啟動postgresql
(註:mysql好像也有類似的設定,請自行詢問google大神囉)
做到這裡,上傳但還沒送出node前,會顯示正確的中文檔名(但送出後檔案名稱仍不正確)
2.修改drupal預設的檔案存取方式(這應該是問題所在)
修改drupal目錄下/includes/file.inc
找到所有用basename(xxx)包起來的函數
用底下這個函數取代
urldecode(basename(drupal_urlencode(xxx)))
(註:檔案內有一些變數也叫$basename,請一個一個看仔細,不要取代錯,做錯恕不負責XD)
存檔...完成!
然後就可以快樂的用中文檔名上傳了~
提供給各位參考...
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
這個應是basename(dirname)無法處理UTF-8中文字 的問題,建議以自訂function 替換,upload & IMCE 模組均有此問題
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
如果只是單純的改 basename function 似乎不夠,
在 file_copy() 這個涵式裡面還有一些地方要改的, 主要是 $dest 要改成 UTF8 編碼,
使用的是 iconv("UTF-8","BIG-5",$dest使用的 ) 這個涵式
附上檔案給大家參考
目前測試過中文檔案上傳下載都沒有問題,
重覆上傳的檔名, 也會在結尾加上一個數字counter
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
很抱歉, 前一個檔案因為只有在 local 測試, 所以有一些問題.
這個版本有 remote 測試過了. 但是只能適用在 "管理"->"網站設定"->"檔案系統" 的選項是公開的 (Public),
隱藏的部分在下載的地方還有問題, 持續追蹤中.
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
能不能弄個更簡單的方案協助一下我們這些只會用、不會寫、也不太敢改的人?
你我皆番人。
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
php 5.1.6 function basename not suport chinese file name under windows
http://drupal.org/node/124785
這是已知的問題, 解決的方法
1. 用 linux 架站
or
2. 用 drupal 4.7 架站
or
3. 等新版 php 出來吧 !
Re:
請問
剛剛試了一下patch
環境:Windows Server 2003 SP2+Appserv 2.48(Apache:2.0.59 PHP:4.4.5)+Drupal 5.1
建立內容時 可以上傳中文檔名(看server上也是中文檔名)
但是點選連結時(看Firefox狀態列 檔案連結是http://ip/drupal/files/D:/www/drupal/files/%E5%80%8B%E4%BA%BA%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E4%BF%9D%E5%81%A5%E6%89%8B%E5%86%8A.pdf)
路徑不對
會出現
Forbidden
You don't have permission to access /drupal/files/D:/www/drupal/files/個人資通安全ä¿å¥æ‰‹å†Š.pdf on this server.
但按右鍵鏈結另存新檔 可以存檔
似乎還是不行
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
謝謝大家
這一兩天將appserv升級到 2.5.8(php:5.2.0)之後
初步試驗的結果ok
終於解決長久來的問題
又增強了跳船到drupal的決心
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
您好
請問您是如何解決的呢?
可否說明一下呢
謝謝您了
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
上面maisonchen有提供patch
下載回來解開 copy到drupal目錄底下的inculudes目錄下 (記得先將原來的檔案改名備份起來)
就這樣
其實我們因為沒有多餘的機器 所以沒法裝linux
再來不想Drupal 4.7
所以最後剩一條路就是升級php
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
sorry!今天再試的結果發現
當上傳中文檔名時 第一次會失敗(路徑會錯誤)
必須回到編輯中將原本檔案刪除 再從新上傳
第二次就正常了
因為這樣
所以上傳的檔名後面都會加上一個數字
這就要請教大家了
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
我也有此問題, 上傳時 看起來還是正確的URL
等到 node Submit 後, 連結在 http://Server/files/ 後面就多出 檔案存放的絕對目錄
例如 http://Server/files/C:/Program files/xampp/drupal/files/檔案.DOC
真傷腦筋 . 也是將附加檔案刪除,再傳一次就會產生正確的URL 了!
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
我在linux的系統中測試仍有問題,確定是php的basename函數問題
php的版本為 5.2.0-8,我對include/file.inc做了個自訂的function
把原本的file.inc備份,下載本檔案之後覆蓋掉原本的就可以使用
--
from open mind to open source~
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
試驗結果
在windows下還是有問題
(d:\xampplite\tmp\xxx.tmp 無法複製)
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
我的使用經驗
在MS Windows以Xampp架設,中文檔名會出問題
在Linux上架設(Debian apt-get),中文檔名OK,我用使用網芳讀取網頁目錄,編碼也是OK的(UTF-8)
不過,我亂玩了幾個模組後,所有的字就變亂碼了,所以還是建議用英文檔名上傳,不然的話就是得小心模組的使用
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
官網有一個模組
可以將您的中文檔名翻譯成英文檔名
http://drupal.org/project/transliteration
請問 現在上傳 中文檔名 還是沒更好的解決方法嗎
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
請問我用這個patch之後
http://drupaltaiwan.org/forum/20070409/1096#comment-2999
可以上傳中文檔名
也可以顯示
但是刪除檔案有問題
文章裡的檔案連結沒了
但是srever端的檔案還在
請問有辦法解決嗎?
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
:%s/basename(\(.*\));/urldecode(basename(drupal_urlencode(\1)));/g
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
這是...要加在哪?
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
這行是打給 vi 看的。
vi 是一款文字編輯器。
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
哦,懂了,在vi編輯檔案時輸入指令,可以置換這些字元
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
一樣的問題,中文檔名在Drupal 6也不行了。有沒有解決方案?
我這裡試著改改看,雖然我的php功力趨近於零...
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
啊呀,cjh829的方法可以用耶,上傳下載都可以。
我的環境是Cent OS 5.1,沒update過php與mysql。
順便附上改好的檔案。<--不能用別找我 :P
Re: 解決中文檔名上傳/下載會出現錯誤 的問題
可以參考下面file.inc的修改方式, 測試過是OK的.
http://drupalchina.org/node/5292
file.inc修改兩個地方就可以
第一個地方,管DB文件名字的
原本是: $file->filename = file_munge_filename(trim(basename($_FILES['files']['name'][$source]), '.'), $extensions);
修改後:$file->filename = file_munge_filename(trim($_FILES['files']['name'][$source], '.'), $extensions);
第二個地方,管上傳到Server的文件名稱
原本是:if (!move_uploaded_file($_FILES['files']['tmp_name'][$source], $file->filepath))
修改後:if (!move_uploaded_file($_FILES['files']['tmp_name'][$source],iconv("UTF-8","BIG-5",$file->filepath)))