décoder l'entité html dans FPDF (en utilisant l'extension tFPDF))

j'utilise tFPDF pour générer un PDF. Le fichier php est encodé UTF-8. Je veux que © par exemple, soit produit dans le pdf comme symbole de copyright.

j'ai essayé iconv , html_entity_decode , htmlspecialchars_decode . Quand je prends la chaîne que j'essaie de décoder et hard-code il dans un fichier différent et le décoder, il fonctionne comme prévu. Donc, pour une raison quelconque, il n'est pas produit dans le PDF. J'ai essayé de le tampon de sortie. J'utilise DejaVuSansCondensed.ttf (vrai type police.)

lien vers tFPDF: http://fpdf.org/en/script/script92.php

Je n'ai plus d'idées. J'ai essayé le double décodage, j'ai vérifié partout pour être sûr qu'il n'était pas encodé ailleurs.

au secours!

4
demandé sur animuson 2012-05-09 17:18:08

5 réponses

vous avez besoin de ceci:

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

le html_entity_decode décode les entités html. mais pour n'importe quelle raison vous devez le convertir en utf8 avec iconv . je suppose que c'est un secret fpdf... cause dans la vue normale du navigateur, il est affiché correctement.

11
répondu emfi 2013-05-20 10:28:35

Actully, fpdf projet de FAQ a une explication:

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

N'utilisez pas L'encodage UTF-8. Les polices FPDF standard utilisent ISO-8859-1 ou Windows-1252. Il est possible d'effectuer une conversion EN ISO-8859-1 avec utf8_decode ():

$str = utf8_decode($str); 

mais certains caractères comme Euro ne seront pas traduits correctement. Si le iconv extension est disponible, la bonne façon de le faire est la suivante:

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

donc, comme emfi le suggère, une combinaison des fonctions iconv() et HTML_ENTITY_DECODE() PHP est la solution à votre question:

$str = iconv('UTF-8', 'windows-1252', html_entity_decode("©"));
3
répondu abu 2014-04-11 09:45:47

je suis presque sûr qu'il n'y a pas de conversion automatique disponible à partir des codes d'entité HTML vers leurs équivalents UTF-8. Dans des cas comme celui-ci, j'ai eu recours au remplacement manuel des cordes, par exemple:

$strOut = str_replace( "©", "\xc2\xa9", $strIn );
0
répondu JamesG 2012-05-15 03:38:20

j'ai corriger le problème avec ce code:

$str = utf8_decode($str);
$str = html_entity_decode($str);
$str =  iconv('UTF-8', 'windows-1252',$str);
0
répondu Giuseppe Pesce 2016-05-02 14:31:58

Vous pouvez également utiliser setFont('Symbol') ou setFont('ZapfDingbats') pour sélectionner les caractères spéciaux que vous souhaitez imprimer.

define('TICK', chr(214)); # in font 'Symbol' -> print a tick symbol
...
$this->SetFont('Symbol', 'B', 8);
$this->Cell(5, 5, TICK, 0, 'L');    # will output the symbol to PDF

sortie: √

de cette façon, vous n'aurez pas besoin de convertir en ISO-8859-1 ou Windows-1252 ou d'utiliser une autre bibliothèque tFPDF pour les caractères spéciaux:)

Refer: http://www.fpdf.org/en/script/script4.php pour Police et liste de caractères

0
répondu tam 2018-05-18 08:54:42