当文件的值包含感叹号和等号时,使用parse_ini_file()语法错误

Sco*_*t B 13 php ini syntax-error

下面的函数使用"test-backup.ini"文件,解析它并通过update_option()方法将值输入到DB中.

但是,当ini文件的值包含特殊字符,如感叹号(!)和等号(=)(以及其他我猜的)时,它会在parse_ini_file($ file)中抛出PHP语法错误:

语法错误,意外"!"等...

例如,将此内容作为test-backup.ini文件...

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

我在line2上遇到"!"的语法错误 并在第4行为"="

在将$文件传递给parse_ini_file()以处理这些字符时,我应该如何过滤$ 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';
}
Run Code Online (Sandbox Code Playgroud)

?>

Fab*_*ssa 20

您应该以这种方式将值放在双引号之间:

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

希望这可以帮助


chi*_*lli 6

您无需更改您的 ini 文件,您只需添加 INI_SCANNER_RAW 选项即可。

parse_ini_file('your.ini', true, INI_SCANNER_RAW);
Run Code Online (Sandbox Code Playgroud)

会做的工作。