我使用ezPDF(0.9版)创建PDF文档。
我在文档中插入的数据来自MySQL数据库,其编码为:“latin1_swedish_ci”。
特殊字符(尤其是ö,现在最重要的)在文档中显示为希腊语前历史algabra(文字)。
到目前为止我尝试过:
iconv();
htmlspecialchars();
htmlentities();
mb_convert_encoding();
utf8_encode();
include with chr(148);
mb_detect_encoding() returns 'UTF-8';
所有这些都不起作用,角色要么不显示,要么有奇怪的标记。
我还能尝试什么?
更新:下载新版本,问题仍然存在:请参阅此处:
答案 0 :(得分:2)
您是否以UTF-8的形式从MySQL获取数据?如果没有,在将它传递给PDF生成器之前,它可能已在该步骤中进行了双重编码?
你试过吗?
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_set_charset('utf8',$link);
编辑:哦对不起,我误会了。但是,请注意,无论您将数据库设置为应包含的内容,数据库中的内容都可能是utf-8编码或以任何其他格式编码。
你能准确地向我们展示你在各个步骤中获得的角色吗?
EDIT2:
我从http://www.ros.co.nz/pdf/downloads.php?f=pdfClassesAndFonts_009e.zip
下载了http://www.ros.co.nz/pdf/并在同一个目录中运行此脚本我解压缩了zip:
<?php
include 'class.ezpdf.php';
$pdf = new Cezpdf('a4','portrait');
$pdf->ezText("\xf6\n",0,array('justification'=>'centre'));
$pdf->ezStream();
?>
至少在文档中得到适当的内容。
如果您说检测到的编码是utf-8,请尝试在其周围包装utf8_decode:
<?php
include 'class.ezpdf.php';
$pdf = new Cezpdf('a4','portrait');
$pdf->ezText(utf8_decode("\xc3\xb6\n"),0,array('justification'=>'centre'));
$pdf->ezStream();
?>
如果它仍然不起作用,也许您有旧版本的ezpdf?似乎他们不得不在很长一段时间内为非ascii角色添加一些修复,尽管很久以前。
答案 1 :(得分:1)
我在这篇文章中尝试了一切,但没有运气。偶然发现了一篇博文,建议如下:
将以下行添加到ezProcessText()
中的class.ezpdf.php
和addText()
中的class.pdf.php
中的函数:
$text = mb_convert_encoding($text, "ISO-8859-1", "UTF-8");
在我的情况下,我只是将其添加到class.pdf.php
,但它确实有效!
答案 2 :(得分:0)
可以在http://www.utf8-chartable.de/找到特殊字符列表,只需在开头添加“\ x”即可获得pdf中的所有特殊字符。
ei:
"\x24"
=&gt; $
"\x5b"
=&gt; [
$pdfObject->ezText("\x5b");
将打印[
答案 3 :(得分:0)
不幸的是,没有办法告诉Cezpdf接受UTF-8编码的文本。使用此代码段,您可以解决此问题:
class UTF8_Cezpdf extends Cezpdf {
function ezText($text, $size=0, $options=array(), $test=0) {
$text = utf8_decode($text); // or use mb_convert_encoding(), according to your needs
return parent::ezText($text, $size, $options, $test);
}
}
当然,您必须实例化旧类的新类:
$pdf = new UTF8_Cezpdf('a4','portrait');
一个缺点:表格中的文字(通过$ pdf-&gt; ezTable()添加)将无法正确编码。