如何使用“parse_ini_file”解析包含特殊字符的ini文件?

时间:2012-10-29 15:41:12

标签: php parsing character-encoding ini

我有一个包含以下内容的folder.ini:

[Labels]
; Ordnername
name=testverzeichnis
; Ordnerbeschreibung
description=verzeichnis zu testen von daten
[Contents]
[Publisher]
publisher=e-Solutions
copyright=André Reinhardt

当我使用parse_ini_file()解析时,我得到了而不是é。 我的代码:

$ini_array = parse_ini_file("sad - Kopie (6)/folder.ini", TRUE);
print_r($ini_array);

我尝试将é替换为é,但我的字符串为0

增加: 此代码使用é&eacute来查看内容有效

echo file_get_contents($directories[$i]."/folder.ini")

我该如何避免这种情况?

1 个答案:

答案 0 :(得分:5)

以下是一个假设,因为您的问题在技术上并未记录到实际原因是什么。

但可以说,这里有一个字符编码相关的问题。

使用UTF-8编码保存INI文件,此 可以正常工作。我假设您的PHP脚本将UTF-8输出到浏览器,并且INI文件中的值不是UTF-8编码的。如果使用UTF-8编码保存INI文件,则此 应该可以正常工作。

这里的关键点不是“UTF-8”,而是使用您使用的应用程序所需的正确字符编码保存INI文件。例如,如果您的应用程序使用ISO-8859-1,则使用ISO-8859-1编码保存INI文件。

两者 - INI文件和PHP脚本 - 需要说出相同的“语言”。

您可以添加一个“翻译器”,它可以帮助您将两种不同的“语言”结合在一起。这样的翻译器(或更正确的重新编码器)是iconv

$ini_iso88591 = file_get_contents("sad - Kopie (6)/folder.ini");
$ini_utf8     = iconv("ISO-8859-1", "UTF-8", $ini_iso88591);
$ini_array    = parse_ini_string($ini_utf8, TRUE);