Fenêtre avec message - bulle d'aide - le script ne marche plus si plusieurs lignes
Contexte : Récupération dans une base MySql, d'un texte a afficher sur une page PHP avec une bulle d'aide (JAVASCRIPT)
On ne sait jamais, j'ai fait tellement de tests avant d'obtenir la solution,... avec un poil de chance vous tomberez sur cette info plus rapidement
En développant une page PHP sur un site de petites annonces de cartes postales anciennes,... j'ai rencontré ce problème :
- Je voulais faire apparaitre une bulle d'aide lorsque la souris promène son cul sur un texte ou une image
onMouseOver en Javascript
- J'ai ré-utilisé le script trouvé sur http://www.javascriptfr.com/codes/ . Un script pour
INFOS BULLE PARAMÉTRABLE (TOUS NAVIGATEURS)
- Cela marchait bien, sauf que, si je récupérais dans ma base de donnée PHPMYSQL un texte qui comprenait des retours à la lignes... plus rien ne s'affichait !
- J'ai imaginé plein de trucs tordus, faute de frappe, etc,... sur la page que j'avais modifiée
mais finalement, un message texte tapé au clavier ne s'affiche plus, dès qu'il y a un retour-charriot (Entrée)
- Si je tapais du texte (au lieu de le récupérer dans la BDD) en insérant la balise
, ça marchait !!!
- J'ai donc essayé de solutionner avec la fonction PHP nl2br
$montextequivasurementmarcher=nl2br($montextemerdique);
Que dalle !
- J'ai fait $enfin_ca_va_chier=str_replace("\n", "*",$montextequimelesgonfle);
C'est évidemment kif-kif bourricot !
Mais quand on est dans les choux, on essaye la moindre virgule !
- Résolu à trouver une soluce, je me suis résolu à orienter ma carcasse du côté du Javascript !
et puisque le remplacement du \n ne suffisait pas (en fait, il me restait un retour à la ligne à la fin de ma variable !)
je fouina du côté des (autres) caractères non imprimables...
-
Et débarqua sur la page http://www.phpinfo.net/page/archives/regex/
pour Supprimer les caractères non-imprimables
- D'abord, je maltraita ainsi ma variable :
$commentaire=nl2br($commentaire);
$commentaire = preg_replace("/\\x0|[\x01-\x1f]/U","",$commentaire);
- Cela fonctionnait, même avec du texte long... Mais mes "bons" retours à la ligne avaient disparus aussi !!!
- Il a fallu alors
- 1° remplacer mes retours à la ligne par un caractère imprimable, mais peu fréquent dans mon texte de commentaire à afficher (je me suis contenté de l' *)
- 2° supprimer les caractères non imprimables (ceux qui me faisaient ...)
- 3° remettre des balises
au lieu de * pour retrouver mes renvois à la ligne
$texte=str_replace("\n", "*",$texte);
$texte = preg_replace("/\\x0|[\x01-\x1f]/U","",$texte);
$texte=str_replace("*", "
",$texte);
-
Putain, ça marche !
Bon c'est tout pour aujourd'hui, j'ai passé presqu'autant de temps à écrire cette page qu'à solutionner mon problème, .... mais
j'ai trouvé grace aux copains, tant mieux si d'autres arrivent ici parce qu'ils ont le même problème à résoudre
Re-bon, j'aurais peut-être du potasser un peu plus le JavaScript, ou acheter un bouquin d'occasion sur la question, mais j'ai pas non plus eu besoin de poster des appels au secours dans tous les forums !
Page générée en pas mal de secondes, le 15 février 2008 - Début des vacances de février