2010-08-18 139 views
0

我使用ezPDF(版本0.9)創建PDF文檔。ezpdf文件中的特殊字符(ö)

我在文檔中插入的數據來自編碼爲「latin1_swedish_ci」的MySQL數據庫。

特殊字符(尤其是ö,現在最重要)顯示爲希臘文前歷史algabra(文字)。

我迄今爲止嘗試:

iconv(); 
htmlspecialchars(); 
htmlentities(); 
mb_convert_encoding(); 
utf8_encode(); 
include with chr(148); 
mb_detect_encoding() returns 'UTF-8'; 

所有這些不會工作的,性格是要麼不顯示或有一個奇怪的標記。

我還能試試嗎?

UPDATE:下載新版本中,問題依然存在:在這裏看到:alt text

回答

1

你從MySQL獲取數據爲UTF-8?如果不是,那麼在將其傳遞給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.ziphttp://www.ros.co.nz/pdf/

,並在同一目錄運行此腳本我解開拉鍊:

<?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字符添加一些修復。

+0

在phpMyAdmin鄰顯示右 在的var_dump: 在PDF本身:它是一個^ – Johan 2010-08-19 13:53:50

+1

磕碰,只是通知我編輯了答案...... – nicomen 2010-08-21 23:20:14

+0

下載新的版本,問題仍然存在: 請參閱:http://i55.tinypic.com/r1hfnd.jpg 希望這有助於。 – Johan 2010-09-03 12:32:44

0

特殊字符列表可以在http://www.utf8-chartable.de/找到,只需在開頭添加「\ x」,您就可以在pdf中找到所有特殊字符。

EI:

  1. "\x24" =>$
  2. "\x5b" =>[

$pdfObject->ezText("\x5b");將打印[

1

我在這個崗位,但沒有運氣用盡了一切辦法。在一個博客帖子偶然發現與提出以下建議:

class.ezpdf.phpaddText()以下行添加到功能ezProcessText()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/

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); 
    } 
} 

當然,你必須實例舊的新的類insteat:

$pdf = new UTF8_Cezpdf('a4','portrait'); 

一個缺點:通過$ PDF-添加表中的文本( > ezTable())將不會被正確編碼。