Экранирование символов в ini файле

101
30 июня 2021, 15:40

Есть функция которая считывает текст по коду с ini файл:

public function alert ($name) {
    $this->data = parse_ini_file($this->directory.'alert.ini');
    return $this->data[$name];
}

Содержимое ini файла:

0001 = danger
0002 = online
0003 = offline
0004 = checked="checked"

Чтение и вывод происходит так:

echo $text->alert('0004');

Проблема:

Как можете заметить в четвертой строке ini файла есть кавычки и тире. При ее вызове выдает ошибку:

syntax error, unexpected '=' in

Задача:

Можно ли как это экранировать такие символы или обработать функцией?

Прошу помощи в реализации!

Answer 1

Можно ли как это экранировать такие символы или обработать функцией?

Примечание из оф.документации:

Если значение в ini-файле содержит прочие символы, кроме букв и цифр, оно должно заключаться в двойные кавычки (").

Исходя из этого, можно дописать метод-обработчик, который будет предварительно читать ini-файл, проверять символы и перезаписывать. См. пример:

class Foo
{
    private $ini;
    private $data = [];
    public function __construct(string $filename = 'alert.ini')
    {
        $this->ini = __DIR__ . DIRECTORY_SEPARATOR . $filename;
        $this->escape_characters_ini_file();
    }
    private function escape_characters_ini_file()
    {
        file_put_contents($this->ini, join(PHP_EOL, array_map(function($i){
            [$name, $value] = explode(' = ', $i, 2);
            return $name . ' = ' . preg_replace('~(?<!")[^\pL\d\s"]~', '"$0"', $value);
        }, file($this->ini, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES))));
    }
    public function alert($name)
    {
        $this->data = parse_ini_file($this->ini);
        return $this->data[$name];
    }
}
$text = new Foo();
echo $text->alert('0004');

Или используйте вместо parse_ini_file() другую функцию для чтения файла.

READ ALSO
Реализация абстрактной коллекции

Реализация абстрактной коллекции

Помогите пожалуйста реализовать абстрактный класс коллекции

110
Как правильно хранить изображения на сервере?

Как правильно хранить изображения на сервере?

Требуется загрузить изображение в MySQL через форму :

103
Получить аватар из инсты php

Получить аватар из инсты php

Как получить аватар из инстаграм? пробую так, но выдает null

114
wordpress изменить автора записи

wordpress изменить автора записи

Как изменить в wordpress автора записи если пользователь состоит в группе editorКак отобразить у него это поле?

94