2012-07-28 54 views
2

我想在英語中使用php做一個dir,它的工作。 但是,當我嘗試在希伯來語,它創建像gibrish這樣的文件夾: '''''''「'」| ''''''''''''''〜php mkdir()在希伯來語創建gibrish文件夾

我該如何解決它? 謝謝

+2

這是一個編碼問題 – 2012-07-28 18:48:22

+0

我知道,但我該如何解決它? – EtayRock 2012-07-28 18:49:56

+0

你在使用什麼操作系統? – 2012-07-28 19:32:59

回答

1

PHP有一些Unicode的支持與字符串處理的時候,但在內部PHP的字符串類型是單字節並且不支持多字節編碼。如果您將PHP文件保存爲UTF-8格式,則可以使用正確的HTTP編碼以UTF-8格式輸出字符串,但許多PHP函數不支持多字節字符串。有一些這樣做,但仍然大多數不這樣做。

我環顧了PHP源代碼,大部分文件系統函數如mkdir都不支持Unicode。它們對單字節字符串進行操作,這就是爲什麼當您嘗試創建目錄時會出現ASCII亂碼的原因。

在致電mkdir之前,您可能會嘗試撥打setlocale並將其設置爲he_IL,看看這是否有任何區別。

更多信息:

字符串是一系列字符,其中一個字符是相同的一個 字節。這意味着PHP僅支持256個字符的集合,因此 不提供本地Unicode支持。見details of the string type

細節更多地談論不同的編碼,功能是基於是否Zend的多字節支持多字節感知和不同的行爲在PHP被啓用,以及如何節省在PHP中不同的編碼效果的字符串文件。

不幸的是,在這個時候,我不相信你能夠直接在PHP中創建一個包含多字節字符串的目錄。

在內部,功能mkdir調用此函數mkdir in file.c它調用_php_stream_mkdir它使用plain files wrapper調用php_mkdir_ex,最終創造出使用virtual_mkdir是使用C的mkdir函數創建目錄的目錄。

我認爲在它調用mkdir在文件系統上創建目錄的時候,所有的編碼都已經丟失,並被視爲單字節char *字符串。

+0

感謝您的嘗試,但setlocale無法正常工作。 任何方式,它可能會創建在gibrish中的文件夾,但是當我試圖去的網址,它在希伯來語中的作品。所以我可以管理。謝謝! – EtayRock 2012-07-29 12:54:14

0

基本上你不能,除非你的操作系統的編碼系統支持這些字符。希伯來語也必須是擴展的UTF-8包的一部分嗎?

例如unde Windows的默認代碼頁是iso-8859-1,它沒有希伯來語。

我認爲它轉換爲UTF-8可能工作爲現在新的Windows版本允許在文件名中的所有Unicode字符,但它不是真的建議

+0

切換到UTF-8在哪裏? 我已經試過 header('Content-Type:text/html; charset = utf-8'); – EtayRock 2012-07-28 19:15:10

1

使用mb_convert_encoding將名稱(字符串)從UTF-8轉換爲ISO-8859-8。 我用PHP 7和Windows 10測試過它。