omment ne pas avoir de problèmes
avec les quotes et double-quotes dans les chaînes que nous formatons. Nous
sommes souvent amenés à créer des chaînes de requêtes
SQL à proposer au SGBD.
Quand la requête est statique, c'est
à dire qu'elle n'a aucune partie variable il n'y a pas de problème.
On choisit par exemple d'encadrer la requête par des " (double-quotes)
et toutes les constantes chaînes à l'intérieur par des simples
quotes. On gère tout et on est tranquille.
Le problème surgit avec des requêtes dynamiques qui mélangent
allègrement les parties constantes avec des parties issues de formulaires
mis à la disposition des utilisateurs. J'utilise alors la technique suivante
:
$MaChaine= sprintf( "ma_chaine_originale", valeur1,
valeur2,..);
"ma_chaine originale" comprenant des %d et des %s.
PHP, JavaScript et HTML quand tout s'embrouille...
J'ai du avoir une fois à créer
des boutons INPUT de façon dynamique (en PHP) avec la gestion du OnClick
qui est lui-même une chaîne de caractères de code JavaScript,
un des paramètres de la chaîne était de type chaîne.
J'étais perdu dans l'imbrication des quotes et des doubles-quotes, je m'en
suis sorti en reprenant la technique précédente : (je ne peux pas
redonner l'original mais c'était plus complexe que cela
printf("<input type='Button' name='%s' onclick='return
fonction( %s)'>", "uneValeur", '"uneAutreValeur"');
Ce qui en sorti dans le HTML donnera
<input type='Button' name='uneValeur' onclick='return
fonction( "uneAutreValeur")'>
Pour aérer le code...
Depuis j'utilise cela régulièrement,
je stocke mes chaînes avec les parties variables dans un fichier à
part et je formate la chaîne finale avec printf et sprintf, mon code s'en
trouve alléger, il est maintenable, je m'y retrouve mieux.
Et pour ne plus m'embarrasser avec les requêtes par exemple, j'ai même
fait des fonctions avec un nombre variables de paramètres qui me renvoient
ma chaîne de requêtes à exploiter avec mes classes d'accès
aux données. En effet toutes les requêtes étant dans un fichier,
une modification est immédiatement répercutée dans tous les
modules. .
On retrouve là encore un piste de réutilisabilité, il est
rare qu'une requête ne servent que dans un module, je ne vous en dis pas
plus vous voyez bien les économies réalisables. Cela permet de partager
aussi les développements entre plusieurs personnes le cas échéant.
Je préfère de loin cette technique à celle qu'autorise PHP
qui consiste à inclure les variables dans un chaîne : "....
$var ...". On perd en lisibilité, en coloration syntaxique suivant
les éditeurs et la chaîne doit absolument être encadrée
par des double-quotes.
Paramétrage du logiciel...
Les logiciels que l'on trouve sur le net
sont écrits comme cela, principalement pour les messages à destination
de l'utilisateur, c'est un excellent moyen d'avoir ces messages en plusieurs langues.
Je vous laisse le soin de décortiquer certains outils qui maîtrisent
cela à l'extrême.
Bon courage.
note : j'ai pris PHP comme support, mais
les fonctions issues de C printf et sprintf existent en Perl par exemple.
Daniel
Lucazeau
Ajornet.com
Chef de projet Internet
Développeur informatique
Tous
droits réservés - Reproduction même partielle interdite sans
autorisation préalable
|