[英]Normalizing (webdav) unicode paths
我正在為PHP的WebDAV實現 。 為了使Windows和其他操作系統更容易協同工作,我需要跳過一些字符編碼箍。
Windows在其HTTP請求中使用ISO-8859-1,而大多數其他客戶端編碼除ascii以外的任何UTF-8。
我的第一種方法是完全忽略這一點,但在返回網址時我很快就遇到了問題。 然后我認為最好將所有網址標准化。
以ü為例。 這將由OS / X通過線路發送
u%CC%88 (this is codepoint U+0308)
Windows將其命名為:
%FC (latin1)
但是,在%FC上執行utf8_encode,我得到:
%C3%BC (this is codepoint U+00FC)
我應該將%C3%BC和u%CC%88視為同一件事嗎? 如果是這樣..怎么樣? 沒有觸摸它似乎適用於Windows。 它以某種方式理解它是一個unicode字符,但更新同一個文件會引發錯誤(沒有特別的原因)。
我很樂意提供更多信息。
Mac將unicode字符存儲為“分解”,即“u”+¨(diaresis)而不是“ü”。 Normalizer可以處理這個問題。 如果您沒有Normalizer,請嘗試iconv('UTF8-MAC', 'UTF8', $str)
我討厭回答我自己的問題,但現在就去了。
我最終沒有打擾。 對各種操作系統如何編碼和處理編碼進行了廣泛的研究。 事實證明,在大多數情況下,使用其他規范化形式的其他操作系統的句柄路徑都可以。 雖然Windows工作有點糟糕,但它確實有效。
每當我收到一個完全不是utf8的路徑時,我會嘗試檢測編碼並將其轉換為UTF-8。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.