Нормализация (webdav) путей Unicode - PullRequest
3 голосов
/ 26 марта 2010

Я работаю над реализацией WebDAV для PHP . Чтобы облегчить совместную работу Windows и других операционных систем, мне нужно перепрыгнуть через некоторые циклы кодирования символов.

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 как одно и то же? Если так .. как? Не трогая это, кажется, работает нормально для окон. Он почему-то понимает, что это символ Юникода, но обновление того же файла приводит к ошибке (без особой причины).

Я был бы рад предоставить больше информации.

Ответы [ 2 ]

1 голос
/ 22 августа 2010

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

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

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

1 голос
/ 26 марта 2010

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

...