Я знаю, что это дублирующий вопрос, но я не нахожу решение из существующих вопросов. Итак, я снова задаю тот же вопрос.
Я использую библиотеку dompdf версии 0.7.0. При генерации PDF есть код вроде
$html = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/></head><body>' . $html . '</body></html>';
if (get_magic_quotes_gpc())
{
$html = stripslashes($html);
}
$dompdf = new DOMPDF;
$dompdf->loadHTML($html, 'UTF-8');
$dompdf->setPaper('A4', 'landscape');
$dompdf->render();
$output = $dompdf->output();
$dompdf->stream("test.pdf", array("Attachment" => 1));
В переменной $ html у меня есть содержимое, которое включает в себя данные, имеющие специальные символы, такие как «Wimić».
Но после генерации pdf он показывает меня как "Wimi?". Я не знаю, как я могу решить это. Есть ли решение для того же.
Это функция потока:
function stream($options = '')
{
if (!is_array($options)) {
$options = array();
}
if (headers_sent()) {
die("Unable to stream pdf: headers already sent");
}
$debug = empty($options['compression']);
$tmp = ltrim($this->output($debug));
header("Cache-Control: private");
header("Content-type: application/pdf");
header("Content-Length: " . mb_strlen($tmp, '8bit'));
$filename = (isset($options['Content-Disposition']) ? $options['Content-Disposition'] : 'document.pdf');
$filename = str_replace(array("\n", "'"), "", basename($filename, ".pdf")) . ".pdf";
if (!isset($options["Attachment"])) {
$options["Attachment"] = true;
}
$attachment = $options["Attachment"] ? "attachment" : "inline";
$encoding = mb_detect_encoding($filename);
$fallbackfilename = mb_convert_encoding($filename, "ISO-8859-1", $encoding);
$encodedfallbackfilename = rawurlencode($fallbackfilename);
$encodedfilename = rawurlencode($filename);
header(
"Content-Disposition: $attachment; filename=" . $encodedfallbackfilename . "; filename*=UTF-8''$encodedfilename"
);
if (isset($options['Accept-Ranges']) && $options['Accept-Ranges'] == 1) {
header("Accept-Ranges: " . mb_strlen($tmp, '8bit'));
}
echo $tmp;
flush();
}