Re: [請益] 存取 Windows 上的中文檔案

看板PHP作者 (道可道非常道)時間14年前 (2010/03/27 18:58), 編輯推噓2(202)
留言4則, 1人參與, 最新討論串4/6 (看更多)
※ 引述《roga (任性)》之銘言: : 推 danny0838:囧...php取不到windows的正確檔名是windows的問題還php? 03/27 13:53 : 都有問題. Windows 檔案名稱編碼混雜是問題一, PHP 讀不到是問題二。 嗯..如果 php 以跨平台為理想,就應該要設法支援所有OS的完整檔名。 : → danny0838:java讀得到,ajax給utf8檔名也能正確開檔XD 03/27 13:55 : 你用 Java 讀得到那是 JVM 處理掉了, 我用 C# 也可以讀得到內容阿。 : http://www.flickr.com/photos/roga/4466001591/sizes/o/ : 我看不懂下一句的 「ajax給utf8檔名也能正確開檔XD」 傳入以 utf-8 編碼的 "消化酶.txt",用 ajax 可以讀到(ajax程式頁面要在本機) 程式碼如下(我沒用async,就算是也一樣) var browser = { isIE: userAgent.indexOf("msie") != -1 && userAgent.indexOf("opera") == -1, ishttp: document.location.protocol.indexOf("http") == 0 } // 建立請求物件 function httpReqObject() { // IE; 較新版之 IE 雖有 XMLHttpRequest 但無法讀到檔案 if (browser.isIE) { try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch(ex) {} try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch(ex) {} try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(ex) {} try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(ex) {} } return new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari } // 嘗試傳送請求並取得回傳值 function loadFileTrial(obj,url) { var err = false; try { obj.open('GET',url,false); // 同步請求 obj.send(null); } catch(ex) { // 文件不存在時 IE, Fx 會發生錯誤 err = true; } // 一些瀏覽器不會出錯,但得到空值。有些於出錯後會傳回前次讀到的值,故 須檢查錯誤與否 if (!err && obj.status!=404) return obj.responseText; return null; } // 載入目標檔案 function ajaxLoadFile(url) { if (!arguments.callee.HRO) { arguments.callee.HRO = httpReqObject(); } var HRO = arguments.callee.HRO; // endoceURI: 中文轉為%xx%xx%xx // IE 本機若讀 encodeURI(url) 會讀不到;http 若讀 url 會傳回錯誤訊息的文字 if (browser.isIE && browser.ishttp) var ret = loadFileTrial(HRO,encodeURI(url)); else var ret = loadFileTrial(HRO,url); // firefox 等的安全設定可能禁止存取 if (!ret && (window.Components && window.netscape && window.netscape. security && !browser.ishttp) ) { try { window.netscape.security.PrivilegeManager.enablePrivilege( "UniversalBrowserRead"); ret = loadFileTrial(HRO,url); } catch(ex){} } // 檔案不存在或空白皆視為載入失敗,傳回 null if (!ret){ //alert('無法讀取檔案: '+url); return null; } return ret; } : http://www.flickr.com/photos/roga/4465942887/sizes/o/ : → danny0838:2我看不太懂,能麻煩大大說詳細一點嗎@@ 03/27 13:56 : → danny0838:"dir > test.txt ,然後把檔案打開..."這段不太懂...我 03/27 13:58 : → danny0838:用cmd模式輸入dir可以正確顯示出消化酶.txt啊 03/27 13:59 : http://www.flickr.com/photos/roga/4465924733/sizes/o/ : 上面我貼了三張圖, 你可以仔細看一下... 哦..我瞭解了, dir可以顯示,但輸出就不行orz... : 如果你一定要用 PHP 解的話, 或許你可以自己寫一個 extension 來試試看能不能動。 應該要先知道 windows 對於混雜 unicode 字元檔名的實際編碼究竟是什麼吧? (不過就算知道了,我也沒那個功力去寫插件orz) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.25.95.127 ※ 編輯: danny0838 來自: 114.25.95.127 (03/27 20:11)

03/29 03:01, , 1F
windows並不是你想像那種混雜 只是ansi/unicode
03/29 03:01, 1F

03/29 03:01, , 2F
分成兩群function
03/29 03:01, 2F

03/29 03:02, , 3F
然後PHP可能為了相容性 所以還在用ansi那邊的
03/29 03:02, 3F

03/29 03:06, , 4F
自己寫extension不難 但我不會在windows底下編php ext= =
03/29 03:06, 4F
文章代碼(AID): #1BhUJ8Tc (PHP)
討論串 (同標題文章)
文章代碼(AID): #1BhUJ8Tc (PHP)