让我们说,在我的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文件?
提前致谢。
亚瑟。
答案 0 :(得分:1)
我不太自信我理解你的问题,但如果你的问题是在PHP中找到逃避()的模拟函数,那么urlencode()
看起来是最好的匹配,但你需要研究什么正好被逃脱了。请注意,例如,有几种不同的方法对字符串进行百分比编码,尤其是多字节字符串。 Flash可以使用escapeMultibyte()
,也可以使用encodeURIComponent()
编码不同的字符子集,也可以不同 - 所以要小心!
现在,关于文件名,如果您的HTTP服务器在Unix系统上运行,那么“文件,。@。xml”是一个有效的文件名,没有什么可担心的 - 有时不方便,但它是一个合法的名称
touch 'fi le,.@.xml'
会创建一个文件,没有问题。基本上,受限制的字符是斜杠和空字符(“\ x00”),但通常也会限制可能被解释为shell命令的字符 - 这完全取决于您。