Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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加载带有编码名称的XML_Php_Xml_Flash_Actionscript 2 - Fatal编程技术网

PHP-DOMDocument加载带有编码名称的XML

PHP-DOMDocument加载带有编码名称的XML,php,xml,flash,actionscript-2,Php,Xml,Flash,Actionscript 2,假设在我的flash项目中,我有一个脚本(通过PHP)动态地为我创建xml文件。XML文件名基于特定变量,并使用escape(variable)进行转义,以防该变量可能(而且大部分情况下)包含不支持的文件名字符 稍后在我的flash项目中,我需要知道xml文件的确切名称,因为只有当unescape(XMLfile)==variable时,我才会加载这些xml文件。有很多变量,所以我不能只使用String.replace()函数来清除未移植的文件名字符 我正在使用PHP文件的一部分: $XMLDo

假设在我的flash项目中,我有一个脚本(通过PHP)动态地为我创建xml文件。XML文件名基于特定变量,并使用
escape(variable)
进行转义,以防该变量可能(而且大部分情况下)包含不支持的文件名字符

稍后在我的flash项目中,我需要知道xml文件的确切名称,因为只有当
unescape(XMLfile)==variable
时,我才会加载这些xml文件。有很多变量,所以我不能只使用
String.replace()
函数来清除未移植的文件名字符

我正在使用PHP文件的一部分:

$XMLDom = new DomDocument('1.0', 'UTF-8');
$xmlId = trim($_POST['xmlId']);
if(file_exists($xmlId)){
    $XMLDom ->load($xmlId);
}else{
    $newXMLHandler = fopen($xmlId, 'w') or die("can't open file");
    fclose($newXMLHandler);

    $XMLDom ->load($xmlId);

    .... rest of the code ....

    $XMLDom ->save($xmlId);
}
上面代码的结果是目录中有2个新创建的XML文件

fopen($xmlId,'w')
创建的一个XML空,名为:“fi%20le%2C%2E%40.XML” 第二个名为:“文件,.@.xml”,其中存储了我所有的新xml数据

有没有办法通过PHP加载转义的命名XML文件

提前谢谢


Arthur.

我对理解您的问题不太自信,但如果您的问题是在PHP中找到要转义()的模拟函数,那么看起来是最好的匹配,但您需要研究转义的确切内容。例如,请注意,有几种不同的方法对字符串进行百分比编码,特别是多字节字符串。Flash可以使用
escapeMultibyte()
或者也可以使用
encodeURIComponent()
对不同的字符子集进行编码,而且编码方式也不同-所以要小心

现在,关于文件名,如果您的HTTP服务器运行在Unix系统上,则“fi le,.@.xml”是一个有效的文件名,无需担心—有时不方便,但它是一个合法的名称

touch 'fi le,.@.xml'

将创建一个文件,没有问题。基本上,受限制的字符是斜杠和空字符(“\x00”),但通常也会限制可能被解释为shell命令的字符-这完全取决于您。

问题是XML不会从转义(或urlencoded)命名文件加载。DomDocument始终取消我请求的名称,并尝试加载'fi-le,.@.xml'而不是'fi%20le%2C%2E%40.xml'。这些名称仅用于示例,名为“/z\*'c.“l.xml”的文件如何?甚至无法保存它。我需要的是替换我的变量的字符串,该变量完全允许作为文件名,可以作为xml加载并解码为原始变量。是的,它可以与fopen()一起使用。谢谢您的建议。我不能使用任何递增计数器,因为所有xml都是基于用户输入创建的;)