使用括号解析ini文件

6

我有一个包含括号( )的.ini文件 如php.net建议的那样,我使用parse_ini_file()函数解析.ini文件,因此让我们假设我的代码看起来像这样:

$ini = parse_ini_file('files/models.ini');

那么错误看起来像:

Warning: syntax error, unexpected '(' in files/models.ini on line 4 in \index.php on line 48

这是第四行的文本。
00name1=100 08/82-11/90 (443/445) Typový sešit [V] [27]

问题是我从外部获取了这个文件,无法更改它。

从多个站点上我注意到,在ini文件中一些单词具有特殊含义,例如“null”、“true”、“no”、“yes”,但这不是这种情况。

所以,各位能否建议我做错了什么,或者如果这是不可能的,是否有任何解决方法?


最简单的解决方案是在您的ini文件中将值用引号括起来。 - Rizier123
是的,我理解,但不幸的是我不能做到 :( - Andurit
2
嗯,parse_ini_file() 函数用于解析符合 php.ini 结构的文件,而不仅仅是任何随意使用的 .ini 文件... - CD001
有没有其他你建议使用的方法呢?我可以尝试任何能让我使用数组或对象的方式 :) - Andurit
如果您不确切地知道models.ini的结构,那么您将会遇到麻烦......除非它符合已经存在的某种标准,否则您可能需要编写自己的解析器......这可能会涉及整个正则表达式世界......仅仅因为一个文件具有*.ini*扩展名,并不意味着编写它的人遵循任何特定的标准:https://en.wikipedia.org/wiki/INI_file - CD001
显示剩余2条评论
1个回答

9
您可以使用选项INI_SCANNER_RAW:
$ini = parse_ini_file('files/models.ini', false, INI_SCANNER_RAW);

文档中可以得知:

如果提供了INI_SCANNER_RAW,那么选项值将不会被解析。

我的测试结果如下:

$ php test.php
array(1) {
  ["foo"]=>
  string(9) "foo (bar)"
  ["00name1"]=>
  string(49) "100 08/82-11/90 (443/445) Typový sešit [V] [27]"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接