在PHP中,函数urlencode()
允许将字符串编码为url片段,对所有可能在url中具有特殊含义的字符进行编码。 urldecode()
可逆编码。
我正在寻找类似的文件系统路径。
urlencode()
可能已经在这里工作了,但似乎比需要的更具攻击性。例如。没有理由转义“()”括号。另一方面,点(尤其是双点)在文件系统路径(上一层)中可能具有特殊含义,因此也许需要对其进行编码。
PHP中是否有可用的工具,或者最接近手动进行的操作?
urlencode()
是否为此目的安全,或者我们是否确实需要注意点?排除点作为第一个字符也许就足够了,但是允许它在路径的中间。
我当前的用例是Linux文件系统路径,但最后我可能希望将其放入应该在不同OS上可用的软件包中。
像urlencode()
一样,我正在寻找可逆的东西。因此,不仅要进行消毒,还要进行编码,以便对其进行解码。
理想情况下,编码路径仍应为人类可读。因此,最好在文件系统路径中允许的大多数字符保持不变。
如果没有这种用例,上面的问题应该已经完成,但是有些人希望看到一个问题。
我有一种情况,我想将大量数据导出到不同的php文件中,并在读取/写入数据时将文件名/路径解释为数组键。
例如
foreach ($addresses as $name => $address) {
file_put_contents($dir . '/' . FILEPATH_ENCODE($name), '<?php return ' . var_export($address, TRUE);');
}
将其存储在单独的文件中的好处是可以使用git轻松跟踪它们,并且将git冲突的可能性降到最低(与将它们全部集中在一个文件中相比)。在文件名/路径中编码数组键意味着我不再需要将其存储在文件本身中,从而减少了冗余。
扩展示例:返回闭包而不是值。
foreach ($addresses as $name => $closureBodyPhp) {
file_put_contents($dir . '/' . FILEPATH_ENCODE($name), '<?php return function () {' . $closureBodyPhp . '};');
}
我要导出的数据或闭包是由现有系统提供的,而不是我自己决定的。
如果您真的想知道:我想替换Drupal 7 features,也就是说,将现有功能生成的php导出到一个集中目录中,而不是导出到单独的功能模块中。
但是,请不要对用例分散注意力。