網頁

搜尋此網誌

2009年3月27日 星期五

Joomla中文檔名問題

Joomla若在Windows主機上,會出現一般PHP中文檔名存檔的問題。

一般是用iconvConvert string to requested character encoding這個函數來解決。string iconv ( string $in_charset , string $out_charset , string $str )

像是
$tmp_name = $_FILES["thisfile"]["tmp_name"];
$name = iconv('UTF-8','BIG-5',basename($_FILES["thisfile"]["name"]));
move_uploaded_file($tmp_name,$name);

目前使用Joomla的擴充元件當中,Remository就會有問題。此外,核心元件media也會有中文檔名存檔的問題。先就Remository的解決方法說明:

joomla目錄\components\com_remository\p-classes裡面的兩個檔案:remositoryPhysicalFile.php和remositoryFile.php需要修改

remositoryPhysicalFile.php

99行
$this->proper_name = iconv('UTF-8','BIG-5',$_FILES[$key]['name']);

200行
if (move_uploaded_file($this->file_path, iconv('UTF-8','BIG-5',$destination))) {

remositoryFile.php

297行
if ($extensiontitle) $this->filetitle = iconv('BIG-5','UTF-8',$physical->proper_name);

572行
$this->realname = iconv('BIG-5','UTF-8',$physicalFile->proper_name);

另外下載的這個部分,資料庫中是用UTF-8編碼,而下載中文需要用BIG-5,因此需要做轉換。
joomla目錄\components\com_remository\c-classes中的remository_download_Controller.php

remository_download_Controller.php

133行
$downpath = iconv('UTF-8','BIG-5',$fileinfo->filePath());

165行
$displayname = iconv('UTF-8','BIG-5',$fileinfo->realname);

沒有留言:

張貼留言

熱門文章