ezpdf文档中的特殊字符(ö)

时间:2010-08-18 14:25:24

标签: php encoding

我使用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';

所有这些都不起作用,角色要么不显示,要么有奇怪的标记。

我还能尝试什么?

更新:下载新版本,问题仍然存在:请参阅此处:alt text

4 个答案:

答案 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.phpaddText()中的class.pdf.php中的函数:

$text = mb_convert_encoding($text, "ISO-8859-1", "UTF-8");

在我的情况下,我只是将其添加到class.pdf.php,但它确实有效!

(资料来源:http://natealberg.wordpress.com/2010/07/26/ezpdf-and-special-characters-copyright-trademark-and-registered-trademark/

答案 2 :(得分:0)

可以在http://www.utf8-chartable.de/找到特殊字符列表,只需在开头添加“\ x”即可获得pdf中的所有特殊字符。

ei:

  1. "\x24" =&gt; $
  2. "\x5b" =&gt; [
  3. $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()添加)将无法正确编码。