PHP解析INI文件时出现等号错误

7
我正在尝试解析一个包含URL变量的INI文件。问题是,该URL中包含'='号,导致parse_ini_file报错。我试图转义字符,但无济于事。请问有人遇到过类似问题吗?如果有,有人解决了吗?
4个回答

14

你是否将值用引号括起来了?只要在值的周围加上引号,value 中包含 = 不应该成为问题。例如:

key1="http://www.google.com?q=test";

2

更好的方法是在parse_ini_file函数的第三个参数中使用INI_SCANNER_RAW

parse_ini_file($file, true, INI_SCANNER_RAW);

1
我曾经遇到同样的问题,让我疯掉了!问题最终是一些愚蠢的东西...我在Windows中创建了.ini文件,使用我重命名为.ini的文件。显然有一些标记留下来被PHP看到,但在我的Notepad++中看不到。
我删除了.ini并在我的Linux主机上创建了一个新的。这解决了问题。如果您在Windows上使用WAMP或XAMPP,请尝试使用只忽略任何标记的记事本创建新文件。
我知道这是一个旧话题,但我最终在这里寻找同样的问题,所以它可能会帮助其他人。

0

这里有一个快速解决parse_ini_*等号问题的方案。您也可以使用正则表达式、数组分割等方法。

function parseIniFile($file) {
if (!is_file($file)) return null;
$iniFileContent = file_get_contents($file);
return parseIniString($iniFileContent);
}

/* solves the equalitiy sign problem */
function parseIniString($iniFileContent==''){
$iniArray = array();
$iniFileContentArray = explode("\n", $iniFileContent);
foreach ($iniFileContentArray as $iniFileContentArrayRow){
    $iniArrayKey = substr($iniFileContentArrayRow, 0, strpos($iniFileContentArrayRow, '='));
    $iniArrayValue = substr($iniFileContentArrayRow, (strpos($iniFileContentArrayRow, '=')+1));
    $iniArray[$iniArrayKey] = $iniArrayValue;
}
return $iniArray;
}

我最终放弃了,并编写了一个非常棒的INI解析类。https://github.com/psion/INI-Class - psion

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