2012-05-09 145 views
4

我正在使用tFPDF生成PDF。 php文件是UTF-8編碼的。 例如,我想要©,作爲版權符號在pdf中輸出。FPDF中的html_entity_decode(使用tFPDF擴展)

我試過iconv,html_entity_decode,htmlspecialchars_decode。當我嘗試解碼字符串並將其硬編碼到不同的文件並對其進行解碼時,它會按預期工作。所以出於某種原因,它不會在PDF中輸出。我試過輸出緩衝。我正在使用DejaVuSansCondensed.ttf(真正的字體)。

鏈接tFPDF:http://fpdf.org/en/script/script92.php

我的想法。我嘗試了雙重解碼,我到處檢查以確保它沒有在其他地方被編碼。

幫助!

+0

[可能的DUP](http://stackoverflow.com/questions/9327960/convert- delascii-characters-delinsentity-codes-ins-to-utf8-in-mysql-on-t),沒有回答':(' – halfer

回答

9

,你需要這樣的:

iconv('UTF-8', 'windows-1252', html_entity_decode($str)); 

html_entity_decode解碼HTML實體。但由於任何原因,您必須將其轉換爲utf8,並使用iconv。我想這是一個fpdf祕密......在正常的瀏覽器視圖中,它顯示正確。

+0

我在哪裏需要找到這個代碼? – SAR

+0

在任何你想做的pdf輸出。例如:$ pdf-> Write(5,iconv('UTF-8','windows-1252',html_entity_decode($ str))); – emfi

0

我很確定沒有從HTML實體代碼到UTF-8等價物的自動轉換。在這樣的情況下,我都使出手動字符串替換,如:

$strOut = str_replace("©", "\xc2\xa9", $strIn); 
3

Actully,FPDF項目幫助有這方面的解釋:

http://www.fpdf.org/~~V/en/FAQ.php#q7

不要使用UTF-8編碼。標準FPDF字體使用ISO-8859-1或 Windows-1252。它能夠以utf8_decode()執行轉換爲ISO-8859-1 :

$str = utf8_decode($str); 

但是,一些字符,例如歐元將不會被正確地轉換。如果 的iconv擴展可用,做正確的方法是:

​​

所以,作爲EMFI表明,)的iconv的組合(和html_entity_decode()PHP函數是解決你的問題:

$str = iconv('UTF-8', 'windows-1252', html_entity_decode("©")); 
+0

用於研究;) – emfi

0

我有這個代碼解決該問題:

$str = utf8_decode($str); 
$str = html_entity_decode($str); 
$str = iconv('UTF-8', 'windows-1252',$str);