1

Bonjour,
je tourne en rond.
Je récupère quelques données (nom, adresse... ) via un formulaire que je traite en php. Les données sont insérées dans du texte, le tout générant un pdf.
Le html (5) est en UTF-8, la page php aussi.
mon constructeur est celui-ci : $pdf = new HTML2PDF('P','A4','fr',true,'UTF-8', array(30, 20, 20, 20) );

A l'affichage; les caractères accentués de mon texte s'affichent sans souci, mais pas les $var php, pourtant dans le même $$html=<<<EOT etc
C'est là où c'est incompréhensible.
Les variables s'affichent normalement dans le retour en Ajax (soumission des données transmises, pour détecter éventuelle erreur).

Le titre du pdf, construit sur le modèle nom.pdf, devient illisible, bien sûr (é -> &Atilde;&copywink. Donc ce n'est pas liè à Acrobat.

Mon serveur de test est sous Linux, ma machine actuelle sous seven.
Aucun autre pb d'affichage nulle part (tout est en utf-8).

J'ai vu des pbs ponctuels sur le forum (caractères "exotiques". là je cherche simplement à mettre un "René" dans un pdf...!
Une piste ?

2

Tu as bien un mysql_query("SET NAMES UTF8");
après la connection à la base de données ?
html2pdf 4.03

3

Bonsoir
non, je ne vais rien chercher dans une BD.
Les variables sont juste transmises en POST depuis un formulaire (en ajax).
Elles sont insérées dans un texte qui constitue le $html à mouliner en pdf.
Les caractères accentués du texte (en dur) sont OK, par contre les variables NON
Or, quand je fais une sorti de ces mêmes variables sur une page web : nickel.

je ne vois pas où est la faille.

4

... suite
Pour info, je suis en html5.
mais dans mon $html, je n'utilise pas les nouvelles balises, on reste dans le standard

5

Alors je ne sais pas trop.

Essaie de t'assurer que TOUS les documents PHP sont bien en UTF8 ?
Il ne suffit pas de le "déclarer" s'ils ne le sont pas.
Installer par exemple Notepad++
Dans le menu "Encoding" cocher "Convert to UTF-8" ou "Encode in UTF-8" et sauvegarder.
html2pdf 4.03

6

Une piste :
quand j'ouvre le pdf et ->propriétés,
je découvre que la police (Helvetica) est encodée en ANSI.

Comment fait-on pour coder les police du doc ?
Je croyais que cela passait par le constructeur ?
Ou j'ai mal compris ?

7

mes pages sont encodées -> code de la page : UTF-8 pour le html (formulaire) et pour le php (traitement).
(d'ailleurs, dans le cas contraire, j'aurais des pbs avec TOUT le texte, non ? )

J'ai essayé de mettre un charset en définissant un entête pour le $html :
<!DOCTYPE html>
<html lang="fr">
<meta charset="utf-8" />

Aucun résultat : dans les propriétés du pdf généré, j'ai toujours une police en ANSI.

8

On avance.

il s'avère que html entities prend une ISO par défaut.
Il faut donc préciser le charset en option
if (!empty($_POST['n'])) {
$nom= htmlentities($_POST['n'], ENT_QUOTES, "UTF-8");

Mon pdf est maintenant OK, sauf pour le titre qui sort toujours des caractères impossibles.

$pdf->Output("../pdf/{$nom}.pdf", 'F');

C'est la même variable $nom.
Y - a t-il une faille ?

9

RESOLU

J'ai créé une fonction pour enlever les accents et autres caratères &eacute....
Cela fait tout de même beaucoup pour un simple nom de 4 lettres.
sacré René.

10

Précision

Mon pb ne vient pas d'Ajax (qui envoie en UTF-8 par défaut).

Il semble bien y avoir un bug de php
if (!empty($_POST['n'])) {
$nom= htmlentities($_POST['n'], ENT_QUOTES, "UTF-8");

si je fais
echo mb_detect_encoding($_POST['n']) ;
echo mb_detect_encoding($nom);

le premier echo me renvoie UTF8
le second : ASCII

Voir ici :
http://stackoverflow.com/questions/5679715/htmlentities-utf-8-problem

Même chose pour htlm specialcharacters
Si qn a des idées