php - 如何在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 –
解决方案
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-1
or cp1252
。
但是,我强烈建议您简单地让您的生活更轻松,并将您的工具链配置为与 UTF-8 一起正常工作,因为您将在尝试在单个文档中表示来自不兼容的单字节编码的符号时遇到无穷无尽的麻烦.
推荐阅读
- javascript - 来自模板的汉堡导航栏切换在导轨上不起作用
- android - 为什么 Realm 找不到我之前在事务中插入的对象?
- javascript - 我无法使用动态路径名附加来自文件路径的图像的动态创建的 div
- python - Python多处理:如果'__name__' == '__main__' bock,使用池调用的函数无法访问内部声明的全局变量
- postman - 为多部分请求中的每个部分发送标头
- android - 如何使 LocalDate 和 LocalTime 可打包?
- python - 您可能需要将 u'127.0.0.1' 添加到 ALLOWED_HOSTS
- android - android UI - 调用 onStop 后可以更新 UI 元素吗?
- vue.js - 从 vue 中的子组件控制一个 prop 类
- python-3.x - 在网格中移动一个正方形