Problème interprétation entre php et fpdf

Problème interprétation entre php et fpdf - PHP - Programmation

Marsh Posté le 14-05-2009 à 18:55:48    

Bonjour,
 
Je planche sur un problème et je n'arrive pas à trouver la solution.
 
en fait j'ai un formulaire avec des textarea dont le nombre de caractère est limité à 470. Ensuite lors de la soumission, un pdf est créé avec les données renseignées.
 
Le problème c'est que si l'utilisateur à fait un retour chariot et bien cela casse mon pdf. En effet, chaque textarea est ensuite contenu dans un encadré sur le pdf. mais ces encadré ne se redimensionnent pas en fonction du contenu.  
 
Donc pour pallier à cela, j'ai donc limité le nombre de caractères et aussi interdit les retour chariot (touche ENTREE désactivée quand il y a focus sur un textarea).
 
Mais des utilisateurs ont contourné l'erreur en faisant plein d'espaces à la suite afin de retourner à la ligne ! Franchement, quelle idée, enfin bref.
 
Donc j'ai trouvé un script sur le net qui est censé mettre une limite de lignes dans le textarea (genre 4 lignes maimum) mais il ne fonctionne pas.
 
Du coup j'ai voulu contourner ce problème en cherchant dans la chaine, les doubles espaces pour les remplacer par un seul espace.
 
Le problème, c'est que si je fais un echo de la variable contenant la valeur du textarea, celui-ci affiche le contenu sans prendre en compte tous les espaces qui s'enchainent. Mais lors de la génération du pdf (avec fpdf), les espaces et donc retour à la lignes causés par ces derniers sont bel et bien présent et mon pdf se retrouve encore une fois cassé !
 
je ne voit pas comment fpdf peut interpreter ces espaces alors que la variable en ophp n'en contient pas.
 
Si quelqu'un a une solution à ce problème je suis preneur car c'est un module que j'ai créé pour ma boite et il y a cette erreur qui gache tout ! (bien que tout les commerciaux ne soient pas aussi gland que certains !)
 
merci à tous

Reply

Marsh Posté le 14-05-2009 à 18:55:48   

Reply

Marsh Posté le 14-05-2009 à 19:13:16    

Ben un echo ça va te donner (probablement dans ta manière de tester) du html... où les espaces ne sont pas pris en compte lorsqu'ils sont supérieurs à 1. Donc ce n'est pas parce que tu ne les vois pas à l'écran qu'ils n'existent pas !
Un strlen permettrait de vraiment savoir le nombre de caractères que contient ta variable (mais bon je suppose que tu t'en doutes).
 
2 solutions :  
- soit une boucle ou regexp qui remplace les espaces > 1.
- soit, si la redimension des cadres est possible (point de vue mise en page, pas technique), regarder un peu en détail la doc / l'aide de fpdf, tu peux faire des MultiCell qui se dimensionnent en fonction du nombre de caractères / de la police, c'est pas très compliqué, et tu trouveras tous les exemples qu'il te faut sur le site.
 
Edit : en plus, si le redimensionnement est possible, tu peux remettre les retours chariots, ce genre de blocage ne doit pas être très évident pour tous tes utilisateurs... Mais bon je ne connais pas tes contraintes.


Message édité par deliriumtremens le 14-05-2009 à 19:16:23
Reply

Marsh Posté le 15-05-2009 à 01:01:59    

merci pour cette réponse deliriumtremens.
 
Alors en fait si j'ai rendu fixe les encadrés c'est tout simplement pour que le pdf généré tienne sur une seule page. D'où toutes ces contraintes en fait. Donc tu me conseilles de faire un regex qui contrôle si il existe des espaces à la sute et de les remplacer par un seul espace ? J'ai essayé avec srtrt mais cela ne fonctionne pas... penses-tu que cela pourrait fonctionner avec un regex ?
 
je vais tenter ça demain matin et je te tiens au courant .
 
merci encore pour tes propositions
 

Reply

Marsh Posté le 15-05-2009 à 09:48:52    

Essayer :

 // Remplacer les nbsp par des espaces
  $s = str_replace("\xA0","",$s);
 
  // Remplacer les espaces consécutifs par un seul espace
  $s = str_replace("  "," ",$s);

Reply

Marsh Posté le 15-05-2009 à 10:36:07    

Salut les gars !
 
Bon alors j'ai essayé avec tes méthodes olivthill mais malheureusement infructueuses mais merci d'avoir proposé des choses.
 
Du coup je me suis tourné vers les regex comme me l'a conseillé deliriumtremens et ça a payé !
 
Voici la regex qui transforme une succession d'espace en un seul espace :  
 
$chaine = preg_replace('/[\s]+/',' ',$chaine);
 
Merci à vous deux pour votre aide.
 
J'espère que ce bon de code dérisoir servira à d'autre !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed