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

3

我有一个包含以下内容的 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")

我该怎么避免这种情况发生?

2
展示一些代码。你是如何输出数据的?在哪里输出? - Pekka
3
你很可能会将 é 输出为 UTF-8 格式,但这样不起作用。请检查 ini 文件保存的编码格式。 - hakre
1
请确保文件以UTF8格式保存,且没有BOM。 - Bogdan Burym
1
@Pekka:那就是“以UTF-8输出”。 - hakre
@Paedow:那么你需要找出/告诉a)文件使用的编码方式(询问文件创建者),以及b)你的PHP脚本的输出编码方式。如果你添加这两个技术细节,那么无论文件使用哪种编码方式,都可以安全地处理它。 - hakre
显示剩余6条评论
1个回答

6
因为你的问题目前没有详细说明实际原因,所以以下内容只是假设。
但可以确定的是,这里存在一个与字符编码相关的问题。
将INI文件保存为UTF-8编码,就可以解决这个问题。我假设你的PHP脚本向浏览器输出的是UTF-8,并且INI文件中的值不是UTF-8编码的。如果你使用UTF-8编码保存INI文件,这个问题应该就会解决。
关键在于,不是"UTF-8"本身,而是要用期望的字符编码保存INI文件,以便与你使用的应用程序进行匹配。例如,如果你的应用程序使用的是ISO-8859-1编码,则将INI文件保存为ISO-8859-1编码。
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);

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