【问题标题】:Using PHP Function parse_ini_file() on an invalid ini file在无效的 ini 文件上使用 PHP 函数 parse_ini_file()
【发布时间】:2016-11-05 12:06:15
【问题描述】:

我有一个来自外部程序的 ini 文件,我无法控制。 ini 文件的值没有双引号示例:

[Setup]
C SetupCode=Code of the currently installed setup (JOW
C machine configuration). Use a maximum of 8 characters.

使用 parse_ini_file() 给我:syntax error, unexpected ')' 我想我应该在 php 中读取原始文件并在值周围添加双引号,如下所示:

[Setup]
C SetupCode="Code of the currently installed setup (JOW
C machine configuration). Use a maximum of 8 characters."

这是最佳做法吗?如果是,我该怎么做?

【问题讨论】:

  • ini 文件通常不需要在值周围加上双引号。见en.wikipedia.org/wiki/INI_file
  • @PaulH INI 文件没有正式的标准格式。这是一个非正式的标准。有些方言支持引用(特别是 Windows 的 INF 文件,它使用 INI 格式用于非常特殊的目的),有些不支持,而其他方言可能需要它。
  • @Rhymoid 是的,但 Mini 似乎认为 parse_ini_file() 需要引号
  • @PaulH 我认为 Mini 认为引用允许值中的换行符,这通常会结束一个值。

标签: php parsing ini


【解决方案1】:

INI 文件格式是一种非正式标准。存在差异,请参阅 https://en.wikipedia.org/wiki/INI_file
C 似乎代表评论,但 parse_ini_file() 不理解这一点。所以读取字符串中的ini文件,将C替换为;,然后使用parse_ini_string()

<?php
// $ini_string = file_get_contents(...);

// test data
$ini_string = "
[Setup]
C SetupCode=Code of the currently installed setup (JOW
C machine configuration). Use a maximum of 8 characters.
SetupCode=my C ode
";

// replace 'C ' at start of line with '; ' multiline
$ini_string = preg_replace('/^C /m', '; ', $ini_string);

$ini_array = parse_ini_string($ini_string);


print_r($ini_array); // outputs Array ( [SetupCode] => my C ode )

【讨论】:

  • 我要删除我的答案,但您可以使用str_replace 这是替换文本的最佳选择,str_replace('C ','; ',$ini_string)
  • @Naumov str_replace 在这种情况下可以解决问题,但并非在所有情况下都可以。仅当行的第一个字符后跟空格时,才应替换 C。
  • Ty,这对我有用,我认为这是因为它缺少值周围的双引号,但正如你所说,它是“C”可能代表“评论”在该行前面搞砸了 parse_ini
猜你喜欢
  • 2012-06-28
  • 2022-12-22
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多