Как преобразовать символ n-тире в CSV в PHP - PullRequest
0 голосов
/ 05 февраля 2019

Я хочу преобразовать en-dash (-) как есть при экспорте в 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 голосов
/ 05 февраля 2019

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 или cp1252.

Однако я настоятельно рекомендую вам просто сделатьупростите свою жизнь и настройте свою цепочку инструментов для правильной работы с UTF-8 вместо этого, поскольку вы не столкнетесь с бесконечными проблемами, пытаясь представить символы из несовместимых однобайтовых кодировок в одном документе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...