Odin34 | Bonjour,
J'ai un souci avec des fonctions qui ont été écrites depuis quelques mois / années qui permettaient de nettoyer des champs text area avant insertion en base ainsi qu'une fonction inverse pour les modifications. Ces fonctions marchaient sans problème sous PHP 4. Depuis le passage à PHP5 lors de l'affichage des champs text area pour modification les return sont doublés.
Fonction pour enregistrement
Code :
- function net_form_enregistrement($a_nettoyer, $textarea=0) {
- if ($textarea == '1') {
- $a_nettoyer = makehtml($a_nettoyer);
- $a_nettoyer = eregi_replace("(\r\n)|(\n)|(\r)|(\r<br >\n)|(<br%20> )|(<br%20/> )|(\r<br />\n)|(\r<br>\n)", "<br />", $a_nettoyer);
- $a_nettoyer = eregi_replace(" ", " ", $a_nettoyer);
- $a_nettoyer = eregi_replace("<br />", "<br />", $a_nettoyer);
- } else {
- $a_nettoyer = htmlspecialchars($a_nettoyer, ENT_QUOTES);
- //$a_nettoyer = makehtml($a_nettoyer);
- }
- return $a_nettoyer;
- }
|
Fonction pour modification
Code :
- function net_form_modification($a_nettoyer,$textarea=0) {
- if ($textarea == '1') {
- $a_nettoyer = eregi_replace(" ", " ", $a_nettoyer);
- $a_nettoyer = unhtmlentities($a_nettoyer);
- $a_nettoyer = eregi_replace("(<br /> )|(\n)|(\r)|(\r<br >\n)|(<br%20> )|(<br%20/> )|(\r<br />\n)|(\r<br>\n)", "\r\n", $a_nettoyer);
- } else {
- $a_nettoyer = unhtmlentities($a_nettoyer);
- $a_nettoyer = eregi_replace('"', """, $a_nettoyer);
- }
- return $a_nettoyer;
- }
|
Autres fonctions appelees
Code :
- function makehtml($string){
- $trans = get_html_translation_table(HTML_ENTITIES);
- $newstring = strtr($string, $trans);
- $newstring = nl2br($newstring);
- return $newstring;
- }
- function unhtmlentities ($string){
- $trans_tbl = get_html_translation_table (HTML_ENTITIES);
- $trans_tbl = array_flip ($trans_tbl);
- return strtr ($string, $trans_tbl);
- }
|
Le fonctionnement est le suivant.
Nous avons un formulaire contenant des text area. Une fois valide on sauvegarde en base. Avant l'insertion on passe le contenu du text area à net_form_enregistrement.
Une fois sauvegardé, le mode affichage est correct. Lorsque l'on veut modifier ce champs on passe en mode edition et le contenu du text area est passé à net_form_modification. C'est à ce moment là que les <br> sont doublés à chaque fois. Le problème vient sans doute du eregi_replace mais j'ai du mal avec ces expressions rationnelles et ces fonctions que je n'ai pas écrites.
Merci de votre aide Message édité par Odin34 le 23-05-2006 à 18:33:44
|