php創建的文件夾名里含有「黒」字時,「黒」字較大概率會重複出現,請問是何原因?

問題已解決,感謝兩位答主 ~O(∩_∩)O~

mkdir(iconv("utf-8", "gbk","黒色"));

換成

mkdir(str_replace("", "\", iconv("utf-8", "gbk//ignore", "黒色")));

就好了。以下是原問題

-----------------------------分-------隔---------線------------------------------

注意這個「黒」不是黑色的黑(雖然在日文里也是黑色的意思)。

這兩天被一個問題困擾,現在終於逼近了真相,表現為:文件夾名內含有「黒」字,則可能會創建出來有兩個黒字的文件夾。如創建「黒色」很可能出現「黒黒色」。

其實不只是重複出現的問題,如果「黒」前面有文字,也會被「複製」一次。

這個現象看上去是這樣的:

從文件名的開頭到「黒」字為止(包括「黒」字),會被複制一次加在完整文件名之前。

如「暗黒色」出問題時就成了「暗黒暗黒色」。

如果此代碼執行正常的話,再執行一次,幾乎百分百出現此問題。有時候第一次執行時就會產生這個異常。

加上「如果文件夾存在就不再創建」的判斷也沒用,反倒是「黒黒色」出現以後,再執行的話就會提示文件已存在。但這個文件已存在的警告是以「黒黒色」為標準的。

請問如何在不修改外部配置的情況下,直接在該php文件內做出處理?

我用的是WampServer Version 2.5里的php,配置沒改。操作系統是win7旗艦版64位簡體中文。附部分phpinfo:


  • GB18030:FC5C
  • UTF-8:E9 BB 92
  • UTF-16:9ED2

知道5C在ASCII里代表什麼吧?特殊符號""!

C語言的printf系函數里,是轉義符,PHP的bug導致不能正確處理這個而導致字元串被截斷

解決辦法要麼是提bug,要麼是直接不用GB18030編碼而全面使用Unicode


看完這個問題我突然發現我寫不出黑色的黑了


我說一下你的原問題,黒作為黑的異體,是音義全同的,把黑色寫成黒色如果不考慮大陸標準是無錯的。


我之前在python也遇到了這個字,坑死我了

不過我在php7.0.6(PHP 7.0.6 (cli) (built: Apr 28 2016 14:11:34) ( NTS ))與5.6.7(PHP 5.6.7 (cli) (built: Mar 19 2015 15:09:32))下各測試10次,均未復現該問題,系統server2012R2,補丁已打到最新


推薦閱讀:

為什麼國內入門書籍嚴重缺失?
RapidJSON中itoa的實現是現在已知最快的么?
如何寫好一個parser?
如何看待25歲博士雷霄驊猝死?
如何打敗超前學習的人?

TAG:PHP | 編程 | 字元編碼 |