2014-08-27 32 views
1

簡言之;PHP的unlink()非ASCII字符=找不到文件

PHP取消鏈接與文件工作,如果他們的名字是ASCI。但是取消鏈接產生的文件未找到錯誤,如果我嘗試刪除與包括文件名的文件C 0等

有什麼辦法,我可以解決這一問題?或者它是由PHP &操作系統之間的關係引起的問題。

+0

你能發佈你正在嘗試的代碼嗎? – 2014-08-27 22:18:45

+0

看起來像一個編碼問題,即您在ISO-8559-1中傳遞文件名,但名稱在操作系統中是UTF-8。 – nalply 2014-08-27 22:19:03

+0

如果服務器是debian-like,請提供我們來自控制檯 – avall 2014-08-27 22:21:53

回答

2

這是最終的編碼問題。

試試這個(如果 './çö' 不是UTF-8,動態地加載爲例):

unlink(mb_convert_encoding('./çö', 'UTF-8')) 

也許你正在使用Windows?從here

unlink(iconv('utf-8', 'cp1252', './çö')); 

無論如何:你應該避免這些文件名。如果它來自用戶:絕不信任用戶輸入!

+0

的「locale」輸出,所以我應該根據os讀寫文件名。 。我應該使用代碼頁轉換將bin數據轉換爲編碼字符串? – user2102266 2014-08-28 00:30:38

+0

@ user2102266從未在文件名中看到過UTF-8符號。你應該避免它。不明白你的意思與第二部分。 – 2014-08-28 00:35:10

+0

是都工作。 '取消鏈接(mb_convert_encoding('./çö','UTF-8'))'燈。 '取消鏈接(iconv('utf-8','cp1252','./çö'));'爲wamp。謝謝 – user2102266 2014-08-29 04:34:40