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

时间:2012-06-01 18:38:39

标签: php xml flash actionscript-2

让我们说,在我的flash项目中,我有一个脚本,可以动态地为我创建xml文件(通过PHP)。 XML文件名基于特定变量并使用escape(variable)进行转义,以防该变量可能(并且主要包含)包含不受支持的文件名字符...

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

我正在使用的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 ” 第二个名为:“ fi le,。@。xml ”,其中存储了所有新的XML数据......

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

提前致谢。

亚瑟。

1 个答案:

答案 0 :(得分:1)

我不太自信我理解你的问题,但如果你的问题是在PHP中找到逃避()的模拟函数,那么urlencode()看起来是最好的匹配,但你需要研究什么正好被逃脱了。请注意,例如,有几种不同的方法对字符串进行百分比编码,尤其是多字节字符串。 Flash可以使用escapeMultibyte(),也可以使用encodeURIComponent()编码不同的字符子集,也可以不同 - 所以要小心!

现在,关于文件名,如果您的HTTP服务器在Unix系统上运行,那么“文件,。@。xml”是一个有效的文件名,没有什么可担心的 - 有时不方便,但它是一个合法的名称

touch 'fi le,.@.xml'

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