我想在导出为csv时按原样转换短划线(–)。
这是我的标题:
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=$this->filename");
header("Pragma: no-cache");
header("Expires: 0");
print "$header\n$data";
我已经尝试了以下方法:
mb_convert_encoding($str, 'ISO-8859-15' 'utf-8');
// converts to –
iconv("UTF-8", "ISO-8859-1//TRANSLIT", $str);
// converts to small -
iconv("UTF-8", "ISO-8859-1//IGNORE", $str);
// ignores (–)
htmlentities($items->campaign_name, ENT_COMPAT, 'utf-8');
//converts to –
答案 0 :(得分:0)
ISO-8859-*
根本没有破折号。 cp1252
,经常与8859-1
混淆的MS版本,确实。
$endash = '–';
var_dump(
bin2hex($endash),
bin2hex(mb_convert_encoding($endash, 'cp1252', 'utf-8'))
);
输出:
string(6) "e28093"
string(2) "96"
其中0x96
是破折号的cp1252
字节。您发布的“错误”转换只是3个字节的UTF-8序列按原样传递,并错误地显示为8859-1
或cp1252
。
但是,我强烈建议您只是让您的生活变得更轻松,并配置您的工具链以使其能够与UTF-8一起正常工作,因为您将无休无止地尝试使用不兼容的单字节编码表示符号一个文件。