PHP DOMDocument的困难,文件名中使用字符编码字符

时间:2018-11-28 06:05:03

标签: php domdocument

我有一个例程,可以将xml片段另存为独立文档。文件名是从其中可能包含字符的元素之一生成的,而这些字符在文件名中不受欢迎-例如空格或/。为了解决这个问题,我首先urlencode()使用文件名,而不是:

ABC DEF/123.xml

我最终得到:

ABC+DEF%2F123.xml

就文件系统而言,这很好用,但是出于某种原因,DOMDocument::loadDOMDocument::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的人提供进一步的评论或提供有关此处发生情况的真实答案。

0 个答案:

没有答案