2012-04-27 24 views
0

我有一個奇怪的問題。在我的開發服務器上,所有的東西都可以工作,但是在實時服務器上卻不行我有一個文件夾中有一個特殊的字符,如「ö」。在開發服務器我這樣做檢查,如果文件名是一個目錄($ DIR =「coördinatie」):PHP'is_dir'與'urldecode'結合爲false,與字符串值相同爲真?

if (is_dir(urldecode($dir))) 
    echo "true"; 
else { 
    echo "false"; 
} 

的結果是正確的。在實時服務器上,結果是錯誤的。奇怪的是...一個硬編碼的字符串工作正常,結果是真的。像這樣:

if (is_dir("coördinatie")) 
    echo "true"; 
else { 
    echo "false"; 
} 

我嘗試了類型轉換爲字符串等,但我無法弄清楚。希望有人有線索。

+2

檢查您在(PHP源文件中定義字符串)中的硬編碼文件的編碼,並告訴我們關於開發服務器和活動服務器上用於文件系統的編碼。 **兩個環境的配置是否相同?** – hakre 2012-04-27 13:02:55

回答

2

我的猜測是這樣的:

urldecode通常解碼爲UTF-8。
您的硬編碼字符串可能是Latin-1,因爲源代碼是這樣保存的。
您的本地計算機上的文件系統(函數)如Unicode,生產中的文件系統(如Latin-1)。

您可能必須將字符串轉換爲您的文件系統所需的編碼。
您可以通過比較兩個字符串的值bin2hex來確認我的懷疑。

+0

'urldecode'是PHP中的一個二進制安全函數,它編碼不可知且始終將二進制8位解碼爲一個八位字節 - 並非特定的UTF-8。 – hakre 2012-04-27 13:05:54

+0

@hakre真的,應該說URL編碼值通常是UTF-8編碼的。 – deceze 2012-04-27 13:07:47

+0

字符串和硬編碼值的BIN2HEX值的確有所不同: 4943542d436ff67264696e61746f72 4943542d436fc3b67264696e61746f72 我真的不知道如何轉換字符串以正確的方式,不知道如何尋找的文件系統編碼。 – 2012-04-27 13:20:13

相關問題