Php 为iso-8859-2发送正确的字符集标头

Php 为iso-8859-2发送正确的字符集标头,php,character-encoding,iso-8859-2,Php,Character Encoding,Iso 8859 2,在PHP中,我无法通过标头发送正确的字符集信息 在我的代码中,我创建了一个ISO-8859-2编码的CSV字符串。我使用以下代码(简化)将其输出到浏览器: 当使用编辑器(我使用记事本++)打开文件时,结果文件被检测为ISO-8859-1,因此显示不正确 将字符串转换为UTF-8可以正常工作: $csv = 'iso-8859-2 encoded string, Łukasz Szukała'; $csv = iconv('ISO-8859-2', 'UTF-8', $csv); header(

在PHP中,我无法通过标头发送正确的字符集信息

在我的代码中,我创建了一个ISO-8859-2编码的CSV字符串。我使用以下代码(简化)将其输出到浏览器:

当使用编辑器(我使用记事本++)打开文件时,结果文件被检测为ISO-8859-1,因此显示不正确

将字符串转换为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()尝试了不同的别名,但在任何浏览器中都无法使用


非常感谢任何有价值的输入。

您所做的一切都是正确的,只是希望记事本++能够检测文件的字符集。 严格来说,ISO-8859-2不是编码而是字符集

由编辑器(any)打开的文件只是发送到浏览器的没有标题的纯文本。所以编辑器可以检测到它是单字节编码,但检测字符集是不可能的,所以它是在默认系统字符集中打开的

请参阅关于编码检测


您的文件仍然有正确的编码,但记事本++只是显示不正确。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;