0

可以说,在我的 Flash 项目中,我有为我动态创建 xml 文件的脚本(通过 PHP)。XML 文件名基于特定变量,并escape(variable)在该变量可能(并且大多数情况下)包含不受支持的文件名字符的情况下使用转义...

稍后我需要在我的 flash 项目中知道 xml 文件的确切名称,因为我仅在unescape(XMLfile) == variable. 有很多变量,所以我不能只使用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文件

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

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

提前致谢。

亚瑟。

4

1 回答 1

1

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

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

touch 'fi le,.@.xml'

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

于 2012-06-01T19:48:03.400 回答