如何在PHP中将短划线字符转换为CSV

时间:2019-02-05 00:00:28

标签: php encoding

我想在导出为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 –

1 个答案:

答案 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-1cp1252

但是,我强烈建议您只是让您的生活变得更轻松,并配置您的工具链以使其能够与UTF-8一起正常工作,因为您将无休无止地尝试使用不兼容的单字节编码表示符号一个文件。