2013-05-23 2 views
0

У меня есть PHP-скрипт для работы с сервером webdav. Чтобы загрузить содержимое папки, я использую запрос PROPFIND webdav. Он возвращает XML. Из XML я извлекаю список папок/файлов и для каждого элемента, который мне нужен, чтобы получить имя. Чтобы получить это, я получаю параметр href, затем делаю urldecode, а затем basename.Плюс символ «+» в href в протоколе WebDAV

Это работает отлично, за исключением одного случая. Если папка/файл на сервере webdav имеет + в имени, то этот плюс не кодируется в опции href. И urldecode расшифровывает его как пространство. Поэтому, наконец, я получаю папку с пространством вместо плюса.

Например, на webdav-сервере у меня есть папка "folder with space and+". Href будет "/folder%20with%20space%20and+/". А после urldecode это будет "folder with space and ".

Я могу исправить это с помощью str_replace('+','%2B',$href) перед urldecode. Но мой скрипт работает со многими серверами webdav. И я не уверен, что все серверы webdav работают одинаково.

Знаете ли вы, что это стандартная вещь, что серверы webdav не кодируют символ +? Или это зависит от программного обеспечения сервера? Что является наиболее правильным способом решения такой проблемы? Спасибо.

ответ

3

«+» является специальным в части запроса URI. Его не нужно кодировать, поэтому сервер ведет себя правильно.