我有一個文件包含運行linux的服務器上的Unicode字符。如果我SSH進入服務器並使用tab-completion導航到包含unicode字符的文件/文件夾,則訪問該文件/文件夾時沒有問題。當我嘗試通過PHP訪問文件時出現問題(我從stat
訪問文件系統的功能)。如果我將PHP腳本生成的路徑輸出到瀏覽器並將其粘貼到終端中,該文件似乎也存在(即使查看終端的文件路徑完全相同)。PHP和不同的Unicode編碼的UTF8文件名
我設置PHP使用UTF8作爲其默認編碼通過php_ini以及設置mb_internal_encoding
。我檢查了PHP文件路徑字符串編碼,它以UTF8的形式出現,就像它應該的那樣。我決定把012終端的標籤完成,並將其與PHP腳本創建的'普通'字符的hexdump
比較,或者通過鍵盤手動輸入字符(選項+ e +在OS X上)。結果如下:
echo -n é | hexdump 0000000 cc65 0081 0000003 echo -n é | hexdump 0000000 a9c3 0000002
允許在終端中正確引用文件的字符是3字節。我不知道該從哪裏下手,我應該在PHP中使用哪種編碼?我是否應該通過iconv
或mb_convert_encoding
將路徑轉換爲另一種編碼?