我在通过 PHP 中的标头发送正确的字符集信息时遇到问题。
在我的代码中,我创建了一个 ISO-8859-2 编码的 CSV 字符串。我使用以下代码(简化)将其输出到浏览器:
$csv = 'iso-8859-2 encoded string, Łukasz Szukała';
header('Content-Type: text/csv; charset=ISO-8859-2');
header('Content-Disposition: attachment; filename=report.csv');
echo $csv;
结果文件被检测为 ISO-8859-1,当使用编辑器打开它时(我使用的是 Notepad++),因此显示不正确。
将字符串转换为 UTF-8 可以按预期工作:
$csv = 'iso-8859-2 encoded string, Łukasz Szukała';
$csv = iconv('ISO-8859-2', 'UTF-8', $csv);
header('Content-Type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment; filename=report.csv');
echo $csv;
在这种情况下,我什至可以完全省略字符集部分。
但是,我需要对文件进行 ISO-8859-2 编码,但我不明白为什么标头信息不会导致文件被检测为 ISO-8859-2。我还根据 IANA ( http://www.iana.org/assignments/character-sets/character-sets.xhtml ) 尝试了不同的别名,但我没有让它在任何浏览器中工作。
非常感谢任何有价值的投入。