Синтаксическая ошибка при использовании parse_ini_file (), когда значения файла содержат восклицательные знаки и знаки равенства - PullRequest
12 голосов
/ 13 июля 2011

Функция, приведенная ниже, берет файл «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';
}

?>

Ответы [ 2 ]

19 голосов
/ 14 июля 2011

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

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

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

1 голос
/ 03 декабря 2018

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

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

сделает всю работу.

...