我有一个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服务器不编码+
符号是标准的吗?或者这取决于服务器软件?解决这个问题最正确的方法是什么?谢谢。
"+"仅在URI的查询部分中是特殊的。它不需要编码,因此服务器的行为正确。