У меня есть 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 не кодируют символ +
? Или это зависит от программного обеспечения сервера? Что является наиболее правильным способом решения такой проблемы? Спасибо.