首页 > 解决方案 > 如何在php中将n-dash字符转换为csv

问题描述

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

标签: phpencoding

解决方案


ISO-8859-*根本没有破折号。cp1252,经常被混淆的MS版本8859-1确实如此

$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-1or cp1252

但是,我强烈建议您简单地让您的生活更轻松,并将您的工具链配置为与 UTF-8 一起正常工作,因为您将在尝试在单个文档中表示来自不兼容的单字节编码的符号时遇到无穷无尽的麻烦.


推荐阅读