2010-03-26 92 views
3

我正在致力於WebDAV implementation for PHP。爲了使Windows和其他操作系統更容易一起工作,我需要跳過一些字符編碼環節。規範化(webdav)unicode路徑

Windows在其HTTP請求中使用ISO-8859-1,而大多數其他客戶端將ascii之外的任何內容編碼爲UTF-8。

我的第一種方法是完全忽略這一點,但在返回網址時我很快遇到了問題。然後,我認爲這可能是最好的標準化所有網址。

以ü爲例。這將讓送過來的OS/X線作爲

u%CC%88 (this is codepoint U+0308) 

的Windows sents此爲:

%FC (latin1) 

但是,這樣做的%FC一個函數utf8_encode,我得到:

%C3%BC (this is codepoint U+00FC) 

我應該將%C3%BC和u%CC%88作爲同一件事嗎?如果是的話......怎麼樣?沒有觸摸它似乎對Windows工作正常。它以某種方式理解它是一個unicode字符,但更新相同的文件會引發錯誤(無特殊原因)。

我很樂意提供更多信息。

+0

當你說「Windows把它當作」時,你的意思是什麼?哪個Windows webdav客戶端?做什麼手術? – 2010-03-26 17:39:40

+0

Windows XP SP3會將任何特殊字符(在拉丁文1平面中)編碼爲ISO-8859-1。我已經嘗試過在PUT上使用新資源。 – Evert 2010-03-29 04:01:02

+0

你的意思是「WebDAV Mini-Redirector」?聽起來像是一個錯誤,舊的webfolder客戶端明確使用UTF-8。 – 2010-03-29 11:21:30

回答

1

我討厭回答我自己的問題,但這裏有。

我最終沒有打擾。對各種操作系統的編碼和處理編碼做了廣泛的研究。結果發現在大多數情況下,使用其他規範化形式的其他os的句柄路徑沒問題。 Windows雖然工作有點瑣碎,但它工作。

每當我收到一個實際上非utf8的路徑時,我會嘗試檢測編碼並將其轉換爲UTF-8。

1

Mac將unicode字符存儲爲「分解」,即「u」+¨(diaresis)而不是「ü」。 Normalizer可以照顧到這一點。如果你沒有Normalizer,試試iconv('UTF8-MAC', 'UTF8', $str)

+1

我不知道UTF8-MAC。我一直在尋找有關哪些編碼可用的文檔,但我找不到它。 任何想法,我本來能夠找到UTF8-MAC? – Evert 2010-03-26 13:23:30

+0

在我的系統上(osx 10.6)「iconv --list」顯示'UTF8-MAC'等,但上面的代碼不起作用。奇怪。 – user187291 2010-03-26 13:45:41