Кодировать строку как фрагмент пути к файлу в PHP - PullRequest
0 голосов
/ 30 января 2019

В 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 в централизованный каталог, а не в отдельные функциональные модули.

Но, пожалуйста, не отвлекайтесь на вариант использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...