dompdf字符编码UTF-8

los*_*ika 14 php utf-8 character-encoding dompdf

我试图用正确的字符创建pdf,但有"?" 字符.我创建了一个测试php文件,我试图找到最好的解决方案.如果我在浏览器中打开html我看起来没问题

UTF-8 --> UTF-8 : X Ponuka ?íslo € ?erný ?ešký 
Run Code Online (Sandbox Code Playgroud)

但是当我查看pdf时,我看到了这一点

UTF-8 --> UTF-8 : X Ponuka ?íslo € ?erný ?ešký 
Run Code Online (Sandbox Code Playgroud)

这是我的所有代码:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>? s š Š</title>
</head>
<body>
<?php 

require_once("dompdf/dompdf_config.inc.php");
$tab = array("UTF-8", "ASCII", "Windows-1250", "ISO-8859-2", "ISO-8859-1", "ISO-8859-6", "CP1256"); 
$chain = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <style></style><title>? s š Š</title></head><body>';
foreach ($tab as $i) 
    { 
        foreach ($tab as $j) 
        { 
            $chain .= "<br> $i --> $j : ".iconv($i, $j, 'X Ponuka ?íslo € ?erný ?ešký <br>'); 
        } 
    } 
$chain .= '<p style="font-family: firefly, verdana, sans-serif;">??????X Ponuka ?íslo € ?erný ?ešký <br></p></body></html>';
echo $chain; 
echo 'X Ponuka ?íslo € ?erný ?ešký <br>'; 

$filename = 'pdf/_1.pdf';
$dompdf = new DOMPDF();
$dompdf->load_html($chain, 'UTF-8');
$dompdf->set_paper('a4', 'portrait'); // change these if you need to
$dompdf->render();
file_put_contents($filename, $dompdf->output());

?> 
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我做错了什么?我尝试了很多选项,我发现:(有什么想法吗?

Bri*_*anS 32

您应该再次阅读Unicode操作方法.主要问题是您没有指定支持您的字符的字体.看起来你已经阅读了该方法,因为你正在使用该文档中的字体示例.但是,该示例并不意味着全局应用于任何文档,dompdf默认情况下不包括firefly(中文字符字体)或Verdana.

如果您没有指定字体,那么dompdf会回退到仅支持Windows ANSI编码的核心字体之一(Helvetica,Times Roman,Courier).因此,请始终确保使用支持Unicode编码的字体设置文本样式,并显示需要显示的字符.

使用dompdf 0.6.0,您可以使用随附的Deja Vu字体.所以以下应该工作(只是HTML):

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<style>
  body { font-family: DejaVu Sans, sans-serif; }
</style>
<title>? s š Š</title>
</head>
<body>
  <p>??????X Ponuka ?íslo € ?erný ?ešký <br></p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)


Fra*_*sek 26

我使用这种组合的UTF-8字符.在将html传递给DOMpdf之前,请使用以下命令进行编码:

$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
Run Code Online (Sandbox Code Playgroud)

在你的CSS中使用DejaVu字体

*{ font-family: DejaVu Sans; font-size: 12px;}
Run Code Online (Sandbox Code Playgroud)

确保在HTML <head>标记中设置了utf-8编码

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Run Code Online (Sandbox Code Playgroud)

现在所有特殊角色都在工作"ľščťžýáíé"


Pra*_*mar 9

只有添加

  <style>
    *{ font-family: DejaVu Sans !important;}
  </style>
Run Code Online (Sandbox Code Playgroud)

</head> 它为我工作之前.