PHP DOMDocument在文件名中使用URL编码字符时遇到困难
我有一个将xml片段保存为独立文档的例程。文件名是由其中一个元素生成的,这些元素可能包含文件名中不需要的字符,例如空格或PHP DOMDocument在文件名中使用URL编码字符时遇到困难,php,domdocument,Php,Domdocument,我有一个将xml片段保存为独立文档的例程。文件名是由其中一个元素生成的,这些元素可能包含文件名中不需要的字符,例如空格或/。要解决此问题,请首先输入文件名,而不是: ABC DEF/123.xml 我的结局是: ABC+DEF%2F123.xml 就文件系统而言,这可以正常工作,但由于某种原因,DOMDocument::load和DOMDocument::save都对%2F进行解码并将其解释为文本/ 这很容易复制: $filename=urlencode('ABC DEF/123.xml')
/
。要解决此问题,请首先输入文件名,而不是:
ABC DEF/123.xml
我的结局是:
ABC+DEF%2F123.xml
就文件系统而言,这可以正常工作,但由于某种原因,DOMDocument::load
和DOMDocument::save
都对%2F
进行解码并将其解释为文本/
这很容易复制:
$filename=urlencode('ABC DEF/123.xml');
$dom=新的DOMDocument();
$dom->save($filename);
PHP警告:DOMDocument::save(ABC+DEF/123.xml):无法打开流:第1行的PHP外壳代码中没有这样的文件或目录
对于一个简单的解决方法,我正在这样做:
file_put_contents($filename, $dom->saveXml());
我的问题是,为什么这些方法会这样?我是否可以设置一个属性或其他方法使这些方法工作,这样我就可以使用DOMDocument方法而不是file\u put\u contents()
或类似的方法
更新:查看文件,似乎文件处理被委托给了“将XML文档转储到文件或URL”。可能是对文件名进行了这种处理,因为它可能也是实际的URL。这仍然给我留下了很多问题。如果您是精通C
或熟悉libxml2
的人,请进一步评论或提供关于此处发生的事情的真实答案,我们将不胜感激