Использование непечатных символов в качестве разделителя в PHP? - PullRequest
1 голос
/ 21 ноября 2011

При сохранении массива в файле я добавляю его с разделителем, но если какое-либо из значений содержит разделитель, это уничтожит это значение (и даст мне 2 меньших значения).* Является ли хорошей практикой использование непечатаемых символов в качестве разделителя?И если да, то как это сделать?

Ответы [ 4 ]

8 голосов
/ 21 ноября 2011

Раньше это была практика в 80-х годах. В частности, в кодировке ASCII были некоторые непечатаемые символы именно для этой цели.

   034   28    1C    FS  (file separator)        134   92    5C    \  '\\'
   035   29    1D    GS  (group separator)       135   93    5D    ]
   036   30    1E    RS  (record separator)      136   94    5E    ^
   037   31    1F    US  (unit separator)        137   95    5F    _

Вы могли бы использовать их как "\036" в PHP, а затем разделить их. Но формат JSON или phps serialize () или даже XML более целесообразны для веб-приложений, чем двоичный формат.

2 голосов
/ 21 ноября 2011

Чтобы сохранить любую структуру данных внутри файла, вы должны использовать serialize для хранения и unserialize для восстановления структуры данных снова.

0 голосов
/ 21 ноября 2011

Не думаю, что это лучшая практика, но если вам пришлось сделать это по какой-то причине, то в приведенном ниже примере показан способ сделать это, используя символ табуляции в качестве разделителя. Эта таблица может быть полезна для вас http://www.asciitable.com/.

$testArray = array('item1', 'item2', 'item3');
$delimiter = chr(9);
$imploded = implode($delimiter, $testArray);
var_dump($imploded);
var_dump(explode($delimiter, $imploded));

Возможно, лучше использовать $delimiter = chr(30), как в ответе @ mario.

0 голосов
/ 21 ноября 2011

Для этой цели существует множество форматов сериализации, которые имеют спецификации для работы с символами, имеющими особое значение в сериализованном формате. Используйте один из них, например JSON , сериализованный PHP или CSV .

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