我有一个PHP脚本可以使用webdav服务器。要加载文件夹内容,我使用PROPFIND
webdav请求。它返回XML。从XML我提取文件夹/文件列表和我需要获取名称的每个项目。为了得到这个我得到href选项,然后做urldecode然后做basename。
除了一个案例外,这个工作正常。如果webdav服务器上的文件夹/文件名称中包含+
,则此加号不会在href选项中编码。并且urldecode将其解码为空格。所以最后我得到一个带空格的文件夹代替加号。
例如,在webdav服务器上,我有文件夹"folder with space and+"
。
Href将为"/folder%20with%20space%20and+/"
。在urldecode之后它将是"folder with space and "
。
我可以在urldecode之前使用str_replace('+','%2B',$href)
解决这个问题。但我的脚本适用于许多webdav服务器。我不确定所有webdav服务器都以相同的方式工作。
您知道webdav服务器不编码+
符号是否标准?或者这取决于服务器软件?
解决此类问题最正确的方法是什么?
感谢。
答案 0 :(得分:3)
“+”仅在URI的查询部分中是特殊的。它不需要编码,因此服务器行为正确。