2010-03-26 2 views
3

Я работаю над WebDAV implementation for PHP. Чтобы упростить работу Windows и других операционных систем, мне нужно перескакивать через обручи символов.Нормализация (webdav) unicode paths

Windows использует ISO-8859-1 в своем HTTP-запросе, тогда как большинство других клиентов кодируют что-либо за пределами ascii как UTF-8.

Мой первый подход состоял в том, чтобы игнорировать это вообще, но я быстро столкнулся с проблемами при возврате URL-адресов. Затем я подумал, что лучше всего нормализовать все URL-адреса.

Использование ü в качестве примера. Это будут передаваться по проводам с помощью OS/X, как

сентов
u%CC%88 (this is codepoint U+0308) 

Windows, это как:

%FC (latin1) 

Но, делая utf8_encode на% FC, я получаю:

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

Должен ли я рассматривать% C3% BC и u% CC% 88 как одно и то же? Если так .. как? Не прикасаться к нему, похоже, нормально работает для окон. Это как-то понимает, что это символ Юникода, но обновление одного и того же файла вызывает ошибку (без какой-либо конкретной причины).

Буду рад предоставить дополнительную информацию.

+0

Что именно вы имеете в виду, когда говорите «Windows воспринимает это как»? Какой клиент Windows webdav? Выполнение какой операции? –

+0

Windows XP SP3 будет кодировать любые специальные символы (в плоскости латинского 1) по ISO-8859-1. Я пробовал это для PUT на новых ресурсах. – Evert

+0

Вы имеете в виду "WebDAV Mini-Redirector"? Звучит как ошибка для меня; более старый клиент веб-папок окончательно использовал UTF-8. –

ответ

1

Ненавижу отвечать на свои вопросы, но здесь.

В итоге я не беспокоился. Проводил обширные исследования по кодированию различных операционных систем и обработке кодировок. Оказывается, что в большинстве случаев другие пути управления os, используя другие формы нормализации, в порядке. Однако Windows работала немного дерьмовая, но она работает.

Всякий раз, когда я получаю путь, который фактически не является utf8, я пытаюсь обнаружить кодировку и преобразовать ее в UTF-8.

1

Mac сохраняет символы unicode как «разложенные», то есть «u» + ¨ (diaresis) вместо «ü». Normalizer может позаботиться об этом. Если у вас нет нормализатора, попробуйте iconv('UTF8-MAC', 'UTF8', $str)

+1

Я не знал о UTF8-MAC. Я искал документацию по поводу того, какие кодировки доступны, но я не мог ее найти. Любая идея, где я мог бы найти UTF8-MAC? – Evert

+0

в моей системе (osx 10.6) «iconv --list» показывает «UTF8-MAC» среди прочих, но приведенный выше код не работает. Странный. – user187291