2010-08-18 37 views
18

J'ai un formulaire Web que les utilisateurs peuvent remplir et ce contenu remplit un fichier PDF avec FPDF et PHP. Lorsqu'un utilisateur entre un mot avec une apostrophe, une barre oblique apparaît avant sur le PDF.Caractères spéciaux dans FPDF avec PHP

De même, les caractères spéciaux tels que les symboles de marque sont mal codés.

Les FPDF FAQ disent utiliser:

$str = utf8_decode($str); 

Mais je ne suis pas sûr de savoir comment l'appliquer à l'ensemble PDF. J'essaie d'y penser comme s'il s'agissait d'une page HTML, mais cela n'aide pas.

Des idées?

Répondre

51

compris cela en procédant comme suit (pagesubtitle est le nom du champ de texte sous la forme):

$reportSubtitle = stripslashes($_POST['pagesubtitle']); 
$reportSubtitle = iconv('UTF-8', 'windows-1252', $reportSubtitle); 

Ensuite, imprimez-le:

$pdf->Write (6, $reportSubtitle); 

Cela supprimera toutes les barres obliques indésirables après les apostrophes, ainsi que l'utilisation de la fonction 'iconv' pour imprimer des caractères spéciaux tels que ™

+0

cela a fonctionné pour moi – mfadel

0

Semble avoir activé magic_quotes. Voir le lien pour désactiver magic_quotes.

18

Tout ce qui précède n'a pas fonctionné pour moi, mais j'ai réussi à le faire fonctionner.

J'ai réussi à le faire "la façon barbare" en traduisant juste chaque caractère bizarre à sa valeur d'url. Alors décodez simplement l'url et voilà!

function em($word) { 

    $word = str_replace("@","%40",$word); 
    $word = str_replace("`","%60",$word); 
    $word = str_replace("¢","%A2",$word); 
    $word = str_replace("£","%A3",$word); 
    $word = str_replace("¥","%A5",$word); 
    $word = str_replace("|","%A6",$word); 
    $word = str_replace("«","%AB",$word); 
    $word = str_replace("¬","%AC",$word); 
    $word = str_replace("¯","%AD",$word); 
    $word = str_replace("º","%B0",$word); 
    $word = str_replace("±","%B1",$word); 
    $word = str_replace("ª","%B2",$word); 
    $word = str_replace("µ","%B5",$word); 
    $word = str_replace("»","%BB",$word); 
    $word = str_replace("¼","%BC",$word); 
    $word = str_replace("½","%BD",$word); 
    $word = str_replace("¿","%BF",$word); 
    $word = str_replace("À","%C0",$word); 
    $word = str_replace("Á","%C1",$word); 
    $word = str_replace("Â","%C2",$word); 
    $word = str_replace("Ã","%C3",$word); 
    $word = str_replace("Ä","%C4",$word); 
    $word = str_replace("Å","%C5",$word); 
    $word = str_replace("Æ","%C6",$word); 
    $word = str_replace("Ç","%C7",$word); 
    $word = str_replace("È","%C8",$word); 
    $word = str_replace("É","%C9",$word); 
    $word = str_replace("Ê","%CA",$word); 
    $word = str_replace("Ë","%CB",$word); 
    $word = str_replace("Ì","%CC",$word); 
    $word = str_replace("Í","%CD",$word); 
    $word = str_replace("Î","%CE",$word); 
    $word = str_replace("Ï","%CF",$word); 
    $word = str_replace("Ð","%D0",$word); 
    $word = str_replace("Ñ","%D1",$word); 
    $word = str_replace("Ò","%D2",$word); 
    $word = str_replace("Ó","%D3",$word); 
    $word = str_replace("Ô","%D4",$word); 
    $word = str_replace("Õ","%D5",$word); 
    $word = str_replace("Ö","%D6",$word); 
    $word = str_replace("Ø","%D8",$word); 
    $word = str_replace("Ù","%D9",$word); 
    $word = str_replace("Ú","%DA",$word); 
    $word = str_replace("Û","%DB",$word); 
    $word = str_replace("Ü","%DC",$word); 
    $word = str_replace("Ý","%DD",$word); 
    $word = str_replace("Þ","%DE",$word); 
    $word = str_replace("ß","%DF",$word); 
    $word = str_replace("à","%E0",$word); 
    $word = str_replace("á","%E1",$word); 
    $word = str_replace("â","%E2",$word); 
    $word = str_replace("ã","%E3",$word); 
    $word = str_replace("ä","%E4",$word); 
    $word = str_replace("å","%E5",$word); 
    $word = str_replace("æ","%E6",$word); 
    $word = str_replace("ç","%E7",$word); 
    $word = str_replace("è","%E8",$word); 
    $word = str_replace("é","%E9",$word); 
    $word = str_replace("ê","%EA",$word); 
    $word = str_replace("ë","%EB",$word); 
    $word = str_replace("ì","%EC",$word); 
    $word = str_replace("í","%ED",$word); 
    $word = str_replace("î","%EE",$word); 
    $word = str_replace("ï","%EF",$word); 
    $word = str_replace("ð","%F0",$word); 
    $word = str_replace("ñ","%F1",$word); 
    $word = str_replace("ò","%F2",$word); 
    $word = str_replace("ó","%F3",$word); 
    $word = str_replace("ô","%F4",$word); 
    $word = str_replace("õ","%F5",$word); 
    $word = str_replace("ö","%F6",$word); 
    $word = str_replace("÷","%F7",$word); 
    $word = str_replace("ø","%F8",$word); 
    $word = str_replace("ù","%F9",$word); 
    $word = str_replace("ú","%FA",$word); 
    $word = str_replace("û","%FB",$word); 
    $word = str_replace("ü","%FC",$word); 
    $word = str_replace("ý","%FD",$word); 
    $word = str_replace("þ","%FE",$word); 
    $word = str_replace("ÿ","%FF",$word); 
    return $word; 
} 

Et bien sûr me appeler la fonction

$weirdword = "Días, Miércoles, Sábado,miércoles"; //Some spanish days 
$weirdword = em($weirdword); 
$weirdword = urldecode($weirdword); 
echo $weirdword; 

sortie Donner:

Días, Viernes, Sábado, jueves

+0

qui a bien fonctionné pour moi =) – PtF

+0

le « barbare » fonctionnement de façon plus fraîche! merci – mikewasmike

+1

Vous pouvez donner des tableaux str_replace en tant que paramètres. – Keelan

3

aucune des solutions ci-dessus a travaillé pour moi, J'ai résolu le problème comme ceci:

$this->AddFont('Arial','','arial.php'); 
$this->SetFont('Arial','',12); 
$this->Cell(0,5,iconv("UTF-8", "CP1250//TRANSLIT", $string),0,1,'L'); 

Avant d'essayer les lignes ci-dessus, procédez comme suit:

Copie de c: /Windows/Fonts/Arial.ttf dans le dossier/tutoriel de FPDF.

Modifier le contenu de makefont.php

require('../makefont/makefont.php'); 
MakeFont('arial.ttf','cp1250'); 

Exécuter makefont.php

Copiez les fichiers suivants dans le dossier/font de FPDF: arial.php arial.ttf arial.z

Enfin, définissez le "dossier de polices". Ouvrez fpdf.php (principal fichier de bibliothèque) et ajouter:

define('FPDF_FONTPATH','font'); 

Le PDF fonctionne pour moi avec tous les caractères spéciaux, je crois qu'il était le problème dans la police Arial lui-même, qui utilise FPDF l'origine. Il devrait aussi fonctionner avec d'autres polices, si elles supportent vos personnages. Bonne chance!

0

Cette classe est une version modifiée de FPDF qui ajoute le support UTF-8. En outre, il incorpore uniquement les parties nécessaires des polices utilisées dans le document, ce qui rend la taille du fichier beaucoup plus petite que si les polices entières étaient incorporées. Ces caractéristiques ont été développées à l'origine pour le projet mPDF.

http://fpdf.org/en/script/script92.php

-1

Essayez cette fonction simple: utf8_encode($txt). Ça marche pour moi.

3

Aucun des points ci-dessus n'a résolu mon problème. Je l'ai résolu de la façon suivante:

setlocale(LC_CTYPE, 'en_US'); 

$value = iconv('UTF-8', 'ASCII//TRANSLIT', $value); 
$fpdf->Cell(140, 6, $value, 1); 

J'espère que vous serez utile.

Référence:Link

+3

Vraiment, génial. C'est ce que je cherchais pendant 3 heures. –