我有一个例程,可以将xml片段另存为独立文档。文件名是从其中可能包含字符的元素之一生成的,而这些字符在文件名中不受欢迎-例如空格或/
。为了解决这个问题,我首先urlencode()
使用文件名,而不是:
ABC DEF/123.xml
我最终得到:
ABC+DEF%2F123.xml
就文件系统而言,这很好用,但是出于某种原因,DOMDocument::load
和DOMDocument::save
都解码%2F
并将其解释为文字/
。
这很容易重现:
$filename = urlencode('ABC DEF/123.xml');
$dom = new DOMDocument();
$dom->save($filename);
PHP警告:DOMDocument :: save(ABC + DEF / 123.xml):无法打开流:第1行php shell代码中没有此类文件或目录
对于一个简单的解决方法,我正在这样做:
file_put_contents($filename, $dom->saveXml());
我的问题是,为什么这些方法会表现出这种方式?并可以设置属性或其他方式使这些方法起作用,以便可以使用DOMDocument方法代替file_put_contents()
之类的方法吗?
更新:看着php source,似乎文件处理委托给了xmlSaveFormatFileEnc()
,据说这是“ 将XML文档转储到文件或URL 。”假定对文件名进行了这种处理,因为它也可能是实际的URL。这仍然让我有很多问题。感谢那些精通C
或熟悉libxml2
的人提供进一步的评论或提供有关此处发生情况的真实答案。