У меня есть сайт php, где я экспортирую некоторые данные в файл PDF. Сайт использует fpdf для создания PDF-файла, но некоторые специальные символы не отображаются правильно в созданном PDF-файле.
Хитрость в том, что некоторые специальные символы печатаются правильно, а другие нет. Default_charset сайта «iso-8859-1», а файлы php закодированы в «ANSI». Я также напечатал массив с информацией (которую я получаю из базы данных), и это нормально. Итак, я думаю, это что-то с fpdf? Но странно, что в некоторых местах один и тот же специальный символ печатается неправильно, а в других — неправильно.
Спасибо 🙂
РЕДАКТИРОВАТЬ:
Я обнаружил, что именно в этом фрагменте кода строки плохо закодированы:
foreach ($this->relatorioData['Roteiro'] as $label => $value) {
$this->Cell(55, 4, html_entity_decode($label), 0, 0, 'L', false);
$this->Cell(95, 4, html_entity_decode($value), 0, 1, 'L', false);
}
Строки в порядке до html_entity_decode, где только некоторые из них теряют специальные символы. Знаете ли вы, что может сделать это? Должен ли я использовать другой метод?
У меня тоже были проблемы с FPDF. Я искал все, прежде чем обнаружил, что это на самом деле решается прямо в FPDF FAQ (вопрос / ответ 3 на момент написания статьи). Там есть ряд потенциальных решений в зависимости от потребностей. Варианты, указанные здесь:
Используйте PHP функция utf8_decode ()
$str = utf8_decode($str);
Используйте PHP функция iconv ()
$str = iconv('UTF-8', 'windows-1252', $str);
Те, кому нужны символы «за пределами windows-1252», направлены на учебник по добавлению новых шрифтов и кодировок, или же tFPDF
Ну, я нашел свой ответ. Мне нужно было изменить это:
html_entity_decode($text)
К этому:
html_entity_decode($label, ENT_COMPAT, 'ISO-8859-1')
Таким образом, все мои струнные были декодированы правильно.