Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP DOMDocument在文件名中使用URL编码字符时遇到困难_Php_Domdocument - Fatal编程技术网

PHP DOMDocument在文件名中使用URL编码字符时遇到困难

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')

我有一个将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
的人,请进一步评论或提供关于此处发生的事情的真实答案,我们将不胜感激