关于php调用fpdf生成pdf中文显示乱码问题

qq_30871693 2015-09-06 11:24:45
用以上代码调用fpdf后会生成pdf文件,但是只有页眉和页脚是中文,正文的从数据库调用的内容无法显示中文
请问如何解决
谢谢了
代码如下

<?php
require('chinese.php');

class PDF extends PDF_Chinese
{
function Header() //设置页眉
{
$this->SetFont ('msyh', '', 10);
$this->Write (20, iconv("UTF-8","gbk",'新闻系统'));
$this->Ln(20); //换行
}
function Footer() //设置页脚
{
$this->SetY(-15);
$this->SetFont('msyh','I',8); //设置页脚字体
$this->Cell(0,10,iconv("UTF-8","gbk",'第'.$this->PageNo().'页'));

}
}
$conn = mysql_connect("localhost", "root", "123456789"); //连接数据库
mysql_select_db("sfsdb", $conn); //执行SQL
mysql_query("SET NAMES gbk");
$query_rs_prod = "SELECT * FROM sfsdbplayers ORDER BY xingming_id";
$rs_prod = mysql_query($query_rs_prod, $conn) or die(mysql_error());
$row_rs_prod = mysql_fetch_assoc($rs_prod);
$totalRows_rs_prod = mysql_num_rows($rs_prod);
$pdf=new PDF(); //创建新的FPDF对象
$pdf->AddGBFont ('msyh',iconv("UTF-8","gbk",'msyh'));
$pdf->Open(); //开始创建PDF
$pdf->AddPage(); //增加一页
$pdf->SetFont ('msyh', '', 10);
$header=array('报名编号','姓名','身高','生日'); //设置表头
$width=array(20,80,40,20); //设置每列宽度
for($i=0;$i<count($header);$i++) //循环输出表头
$pdf->Cell($width[$i],6,$header[$i],1);
$pdf->Ln();
do //循环输出表体
{
$pdf->Cell($width[0],6,$row_rs_prod['xingming_id'],1);
$pdf->Cell($width[1],6,$row_rs_prod['xingming'],1);
$pdf->Cell($width[2],6,$row_rs_prod['shengao'],1);
$pdf->Cell($width[3],6,$row_rs_prod['shengri'],1);
$pdf->Ln();
} while ($row_rs_prod = mysql_fetch_assoc($rs_prod));
//$pdf->Output("chinaz.pdf", true); //下载PDF文件
ob_end_clean();
$pdf->Output('mysfsinfo.pdf', 'I');

?>

用以上代码调用fpdf后会生成pdf文件,但是只有页眉和页脚是中文,正文的从数据库调用的内容无法显示中文
请问如何解决
谢谢了

附件为输出的结果图
...全文
1077 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
tottyandbaty 2015-09-10
  • 打赏
  • 举报
回复
应该是字体库的问题吧
saint_leer 2015-09-09
  • 打赏
  • 举报
回复

...
$header = array(iconv("UTF-8", "gbk", '报名编号'), iconv("UTF-8", "gbk", '姓名'), iconv("UTF-8", "gbk", '身高'), iconv("UTF-8", "gbk", '生日'));   //设置表头
...
xuzuning 2015-09-07
  • 打赏
  • 举报
回复
echo base64_encode($row_rs_prod); 贴出结果 你做了吗?
lirenbing008 2015-09-07
  • 打赏
  • 举报
回复
你fpdf要求什么编码 你文件格式是什么编码 数据库是什么编码 3个先统一起来 无脑的iconv 你自己都会晕
misaka去年夏天 2015-09-07
  • 打赏
  • 举报
回复
你的数据库表是utf-8的还是GBK的??mysql_query("SET NAMES gbk");把gbk改成utf-8吧
qq_30871693 2015-09-07
  • 打赏
  • 举报
回复
引用 4 楼 misakaqunianxiatian 的回复:
在输出页面之前,Header('Content-type:text/html;charset=utf-8'); 试试
<?PHP Header('Content-type:text/html;charset=utf-8'); ?> <?php require('chinese.php'); class PDF extends PDF_Chinese { function Header() //设置页眉 { $this->SetFont ('msyh', '', 10); $this->Write (20, iconv("UTF-8","gbk",'新闻系统')); $this->Ln(20); //换行 } function Footer() //设置页脚 { $this->SetY(-15); $this->SetFont('msyh','I',8); //设置页脚字体 $this->Cell(0,10,iconv("UTF-8","gbk",'第'.$this->PageNo().'页')); } } $conn = mysql_connect("localhost", "root", ""); //连接数据库 mysql_select_db("sfsdb", $conn); //执行SQL mysql_query("SET NAMES gbk"); $query_rs_prod = "SELECT * FROM sfsdbplayers ORDER BY xingming_id"; $rs_prod = mysql_query($query_rs_prod, $conn) or die(mysql_error()); $row_rs_prod = mysql_fetch_assoc($rs_prod); $totalRows_rs_prod = mysql_num_rows($rs_prod); $pdf=new PDF(); //创建新的FPDF对象 $pdf->AddGBFont ('msyh',iconv("UTF-8","gbk",'msyh')); $pdf->Open(); //开始创建PDF $pdf->AddPage(); //增加一页 $pdf->SetFont ('msyh', '', 10); $header=array('报名编号','姓名','身高','生日'); //设置表头 $width=array(20,80,40,20); //设置每列宽度 for($i=0;$i<count($header);$i++) //循环输出表头 $pdf->Cell($width[$i],6,$header[$i],1); $pdf->Ln(); do //循环输出表体 { $pdf->Cell($width[0],6,$row_rs_prod['xingming_id'],1); $pdf->Cell($width[1],6,$row_rs_prod['xingming'],1); $pdf->Cell($width[2],6,$row_rs_prod['shengao'],1); $pdf->Cell($width[3],6,$row_rs_prod['shengri'],1); $pdf->Ln(); } while ($row_rs_prod = mysql_fetch_assoc($rs_prod)); //$pdf->Output("chinaz.pdf", true); //下载PDF文件 ob_end_clean(); $pdf->Output('mysfsinfo.pdf', 'I'); ?> 这个是最新修改后的代码 加入您说的header依然输出中文乱码
qq_30871693 2015-09-07
  • 打赏
  • 举报
回复
引用 4 楼 misakaqunianxiatian 的回复:
在输出页面之前,Header('Content-type:text/html;charset=utf-8'); 试试
加了 大哥 不行哈! 我贴的代码就是全部包括输出内容的代码! 正文输出的东西 都是乱码 这数据库是从数据库读取的! 麻烦了 ! 着急哈!
misaka去年夏天 2015-09-07
  • 打赏
  • 举报
回复
在输出页面之前,Header('Content-type:text/html;charset=utf-8'); 试试
qq_30871693 2015-09-07
  • 打赏
  • 举报
回复
引用 2 楼 xuzuning 的回复:
观察你的乱码情况,应该是你吧 utf-8 字符当做 gbk 显示了 你 $row_rs_prod = mysql_fetch_assoc($rs_prod) 一条有中文的记录 echo base64_encode($row_rs_prod); 贴出结果
具体咋修改 加了您的这个语句仍然输出乱码哈
xuzuning 2015-09-07
  • 打赏
  • 举报
回复
观察你的乱码情况,应该是你吧 utf-8 字符当做 gbk 显示了 你 $row_rs_prod = mysql_fetch_assoc($rs_prod) 一条有中文的记录 echo base64_encode($row_rs_prod); 贴出结果
码无边 2015-09-07
  • 打赏
  • 举报
回复
设置下字体文件,之前也遇到过,我用的是tcppdf
xuzuning 2015-09-07
  • 打赏
  • 举报
回复
拜托你认真看一下我在 #2 的回复
qq_30871693 2015-09-07
  • 打赏
  • 举报
回复
引用 14 楼 xuzuning 的回复:
这不是替你修改的问题,因为代码并无错误 而是你从数据库里读出的数据有问题! 所以我才让你贴出来,但是你并不愿意这么做 我也就无能为力了
贴出来了啊! 我那截图不就是贴出来的东西!
xuzuning 2015-09-07
  • 打赏
  • 举报
回复
这不是替你修改的问题,因为代码并无错误 而是你从数据库里读出的数据有问题! 所以我才让你贴出来,但是你并不愿意这么做 我也就无能为力了
qq_30871693 2015-09-07
  • 打赏
  • 举报
回复
引用 12 楼 xuzuning 的回复:
为什么不按我说的做呢?
抱歉啊!我是新手,刚接触不久,麻烦您能在我的带马上给我修改下? <?PHP Header('Content-type:text/html;charset=utf-8'); ?> <?php require('chinese.php'); class PDF extends PDF_Chinese { function Header() //设置页眉 { $this->SetFont ('msyh', '', 10); $this->Write (20, iconv("UTF-8","gbk",'新闻系统')); $this->Ln(20); //换行 } function Footer() //设置页脚 { $this->SetY(-15); $this->SetFont('msyh','I',8); //设置页脚字体 $this->Cell(0,10,iconv("UTF-8","gbk",'第'.$this->PageNo().'页')); } } $conn = mysql_connect("localhost", "root", ""); //连接数据库 mysql_select_db("sfsdb", $conn); //执行SQL mysql_query("SET NAMES UTF8"); $query_rs_prod = "SELECT * FROM sfsdbplayers ORDER BY xingming_id"; $rs_prod = mysql_query($query_rs_prod, $conn) or die(mysql_error()); $row_rs_prod = mysql_fetch_assoc($rs_prod); echo base64_encode($row_rs_prod); $totalRows_rs_prod = mysql_num_rows($rs_prod); $pdf=new PDF(); //创建新的FPDF对象 $pdf->AddGBFont ('msyh',iconv("UTF-8","gbk",'msyh')); $pdf->Open(); //开始创建PDF $pdf->AddPage(); //增加一页 $pdf->SetFont ('msyh', '', 10); $header=array('报名编号','姓名','身高','生日'); //设置表头 $width=array(20,80,40,20); //设置每列宽度 for($i=0;$i<count($header);$i++) //循环输出表头 $pdf->Cell($width[$i],6,$header[$i],1); $pdf->Ln(); do //循环输出表体 { $pdf->Cell($width[0],6,$row_rs_prod['xingming_id'],1); $pdf->Cell($width[1],6,$row_rs_prod['xingming'],1); $pdf->Cell($width[2],6,$row_rs_prod['shengao'],1); $pdf->Cell($width[3],6,$row_rs_prod['shengri'],1); $pdf->Ln(); } while ($row_rs_prod = mysql_fetch_assoc($rs_prod)); ob_end_clean(); $pdf->Output('mysfsinfo.pdf', 'I'); ?>
xuzuning 2015-09-07
  • 打赏
  • 举报
回复
为什么不按我说的做呢?
qq_30871693 2015-09-07
  • 打赏
  • 举报
回复
引用 9 楼 xuzuning 的回复:
echo base64_encode($row_rs_prod);
贴出结果

你做了吗?


仍然是乱码,错误依旧!
qq_30871693 2015-09-07
  • 打赏
  • 举报
回复
引用 8 楼 lirenbing008 的回复:
你fpdf要求什么编码 你文件格式是什么编码 数据库是什么编码 3个先统一起来 无脑的iconv 你自己都会晕
我FPDF要求是输出中文格式,数据库是UTF-8的编码, 代码都贴出来了! 麻烦帮解决下 谢谢了!

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧