Normalleştirme (WebDAV) unicode yolları

2 Cevap php

Ben bir WebDAV implementation for PHP üzerinde çalışıyorum. Daha kolay, Windows ve diğer işletim sistemlerinin birlikte çalışması için yapmak amacıyla, bazı karakter kodlama çemberler üzerinden atlamak gerekiyor.

Çoğu diğer istemcilerin UTF-8 olarak ASCII ötesinde bir şey kodlamak iken, Windows, HTTP istek var ISO-8859-1 kullanır.

Benim ilk yaklaşım, tamamen bu görmezden, ama adresler dönerken hızla sorunları koştu. Ben o zaman tüm adresler normalleştirmek için muhtemelen en iyi olduğunu düşündüm.

Bir örnek olarak kullanma u. Bu gibi OS / X tarafından tel üzerinden gönderilir alacak

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

, Windows rak yüzlerce bu şekilde:

%FC (latin1)

Ancak,% FC bir utf8_encode yapıyor alıyorum:

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

Ben% C3% BC tedavi ve aynı şey olarak u% CC% 88 olmalıdır? Eğer öyleyse .. nasıl? Bu pencereler için Tamam iş gibi görünüyor dokunmuyorum. Bu şekilde bir unicode karakter olduğunu anlar, ama aynı dosyayı güncelleme (özel bir nedeni yok) bir hata atar.

Ben daha fazla bilgi sağlamak için mutlu olurdu.

2 Cevap

Ben kendi sorularını yanıtlayan nefret, ama burada gider.

Ben rahatsız değil sona erdi. Çeşitli işletim sistemleri kodlamak nasıl kapsamlı bir araştırma yaptım, ve kodlamaları anlaştım. Çoğu durumda, diğer os en iyi diğer normalleştirme formları kullanarak yolları işlemek çıkıyor. Windows olsa biraz boktan çalıştı, ama çalışıyor.

Ben tamamen aslında olmayan-utf8 olan bir yol aldığınızda, ben kodlamayı algılar ve UTF-8 dönüştürmek için deneyin.

Mac mağazaları, "u" + ¨ yerine "U" (diaresis) yani, "çürümüş" olarak karakter unicode. Normalizer bu çaresine bakabilirim. Eğer Normalizeri yoksa, iconv('UTF8-MAC', 'UTF8', $str) deneyin