2012-06-28 20 views
1

我有一個問題,與PHP重命名功能,它失敗,如果文件名是用空格的阿拉伯語單詞。PHP重命名失敗的文件名與utf-8阿拉伯字符串字符串

例如

rename(temp/أم كلثوم  ثوار - ثوار.mp3,audio/13408831061.mp3); 

中(路徑)沒有這樣的文件或目錄

請注意:أم كلثومxxxxxxxxثوار - ثوار.mp3

xxxxxxx這裏ATLEAST六個空格。

我試過urlencode()但仍然沒有結果。

任何建議!

+0

首先,不'音頻/'存在的目錄?其次,var_dump(file_exists('temp /أمكلثومثوار - ثوار。mp3'));'說? – DaveRandom

+0

是的,音頻目錄存在,但文件名doesnot,雖然我檢查臨時/文件夾和文件存在,但作爲文件名是不合法的,它會導致重命名失敗,因爲它找不到該文件在temp/ –

+0

所有文件與合法名稱被準確地重命名。只是帶有空格或無效字符的阿拉伯名字失敗。 –

回答

1

要檢查您的$file_id是正確的,這樣做一個類Unix系統上:

echo "<pre>\n"; // for HTML output only 
system("echo -n '$file_id' | od -tx1"); 

有了這個值,這應該是你的報告文件名(你可以做一個echo檢查)

$file_id = "\xD9\x83\xD9\x84\xD8\xAB\xD9\x88\xD9\x85 \xD8\xAB\xD9\x88\xD8\xA7\xD8\xB1 - \xD8\xAB\xD9\x88\xD8\xA7\xD8\xB1.mp3"; 

輸出

0000000 d9 83 d9 84 d8 ab d9 88 d9 85 20 d8 ab d9 88 d8 
0000020 a7 d8 b1 20 2d 20 d8 ab d9 88 d8 a7 d8 b1 2e 6d 
0000040 70 33 
0000042 

(你可以看到,用B1不斷重複結束序列,最後4個字節是.mp3

在文件所在的目錄應該是可以發出

ls -1 | od -tx1 

,你會看到所有文件名由0a它們分開換行。

如果兩個輸出匹配,問題出現在PHP或系統中(不太可能),如果他們不這樣做,則必須從編碼開始追蹤問題,編碼必須是UTF-到處都是8。

+0

我按照你的建議做,發現urlencoded文件名在temp /目錄中不同,並且重命名函數源文件名。所以我分析後面的代碼,發現basename($ _ FILES ['songs'] ['name'])被應用,導致temp /目錄中的文件名不同。我刪除它,現在文件名是相同的,並且可以準確地重命名文件。感謝Walter Tross –

2

此樣品必須幫助,我測試婁代碼,它工作在Windows對於阿拉伯語/波斯語名稱:

$newname = $filename = iconv("utf-8", "cp1256","گچپژ"); 
echo rename("1.txt", $newname); 
+0

它應該是:'echo重命名($ newname,「1.txt」);' –

相關問題