Re: [請益] 存取 Windows 上的中文檔案
※ 引述《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
03/29 03:01, 1F
→
03/29 03:01, , 2F
03/29 03:01, 2F
→
03/29 03:02, , 3F
03/29 03:02, 3F
推
03/29 03:06, , 4F
03/29 03:06, 4F
討論串 (同標題文章)