Подтвердить что ты не робот

Синтаксическая ошибка с использованием parse_ini_file(), когда значение файла содержит восклицательные знаки и знаки равенства

В приведенной ниже функции используется файл test-backup.ini, анализируется и вводится значения в БД с помощью метода update_option().

Однако, когда значения ini файла содержат специальные символы, такие как восклицательные знаки (!) и равные знаки (=) (и другие, которые я бы догадался), он бросает синтаксическую ошибку PHP в файле parse_ini_file ($ file):

Синтаксическая ошибка, неожиданные "!" и т.д.

Например, учитывая этот контент как файл test-backup.ini...

[settings]
line1 = asc
line2 = /*.blog ul li {margin-bottom:0 !important;}*/
line3 = true
line4 = <meta name="google-site-verification" content="" />

Я получаю синтаксические ошибки в строке2 для "!" и в строке 4 для "="

Как мне фильтровать файл $перед передачей его в parse_ini_file() для обработки этих символов, чтобы они сохранялись при передаче вызова update_option()?

Все, что я нашел до сих пор, это:

Символы {} | & ~! [() "не должны использоваться нигде в ключе и имеют особое значение в значении.

$file = WP_PLUGIN_DIR.'/test/test-backup.ini';

if (file_exists($file) && is_readable($file))
{       
    $ini_array = parse_ini_file($file); //errors when value contains =, !, etc
    foreach ($ini_array as $key=>$value) {
        update_option($key, $value); 
    } 
    echo 'The settings have been saved';
}
else
{
    echo 'alternate response here';
}

? >

4b9b3361

Ответ 1

Вы должны поместить свои значения между двойными кавычками следующим образом:

line1 = asc
line2 = "/*.blog ul li {margin-bottom:0 !important;}*/"
line3 = true
line4 = "<meta name=\"google-site-verification\" content=\"\" />"

Надеюсь, что это поможет

Ответ 2

Вам не нужно менять свои ini файлы, вы можете просто добавить параметр INI_SCANNER_RAW.

parse_ini_file('your.ini', true, INI_SCANNER_RAW);

будет выполнять эту работу.