В PHP функция urlencode()
позволяет кодировать строку как фрагмент URL, кодируя все символы, которые могут иметь специальное значение в URL.Кодировка обратима с urldecode()
.
Я ищу что-то подобное для путей файловой системы.urlencode()
может уже работать здесь, но кажется более агрессивным, чем нужно.Например, нет причин избегать скобок "()".С другой стороны, точка, особенно двойная точка, может иметь особое значение в пути файловой системы (на один уровень выше), поэтому, возможно, ее необходимо будет закодировать.
Есть ли что-нибудь доступное в PHP или чтобыло бы ближе всего сделать вручную?
Безопасен ли urlencode()
для этой цели, или мы действительно должны быть осторожны с точкой?Возможно, достаточно исключить точку в качестве первого символа, но разрешить ее в середине пути.
Мой текущий вариант использования - пути к файловой системе Linux, но, в конце концов, я мог бы поместить это впрограммный пакет, который должен использоваться в разных ОС.
Как и 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 ,то есть экспортируйте существующие сгенерированные функции php в централизованный каталог, а не в отдельные функциональные модули.
Но, пожалуйста, не отвлекайтесь на вариант использования.