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

发布于 2024-11-19 16:26:07 字数 1107 浏览 2 评论 0原文

下面的函数获取“test-backup.ini”文件,解析它并通过 update_option() 方法将值输入到数据库中。

但是,当 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="" />

我在第 2 行收到“!”的语法错误以及第 4 行的“=”

在将 $file 传递给 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';
}

?>

The function below takes the "test-backup.ini" file, parses it and inputs the values into the DB via the update_option() method.

However, when the ini file's values contain special characters like exlamation points (!) and equal signs (=) (and others I would guess), its throwing a PHP syntax error at parse_ini_file($file):

Syntax error, unexpected "!", etc...

For example, given this content as the test-backup.ini file...

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

I get syntax errors on line2 for the "!" and on line 4 for the "="

How should I filter the $file before passing it to parse_ini_file() to deal with these characters to that they are preserved when passed to the update_option() call?

All I've found thus far is this:

Characters {}|&~![()" must not be used anywhere in the key and have a special meaning in the value.

$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';
}

?>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

撞了怀 2024-11-26 16:26:07

您应该这样将您的值放在双引号之间:

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

希望这有帮助

You should put your values between double quotes this way:

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

Hope this helps

深者入戏 2024-11-26 16:26:07

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

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

会做这项工作。

You don't need to change your ini files you can just add the INI_SCANNER_RAW option.

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

will do the job.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文