Page 1 sur 1

Remplacement de caractère avec javascript

Posté : 19 mai 2010, 08:48
par BaLiSTiK
Bonjour,

J ai un léger soucis de remplacement de caractère, je désirerai en gros faire l'équivalent de la fonction str_replace() de PHP en remplacent les espaces et les apostrophes de ma chaine de caractères par leur équivalent ASCII. Le soucis c est que dès qu'une occurence à remplacer est trouvée, ça coupe ma chaine de caractère.

Code : Tout sélectionner

//Chaine de caracteres qu'on va chercher pour les remplacer par leur code ascii var appReplace = new RegExp(/\'/g); //On cherche les apostrophes var espReplace = new RegExp(/\b/g); //on cherches les espaces // utiliser \s dans la regexp ? //exemple : var champ = "Le chien a mangé l'os"; // -> doit se transformer en "Le#32;chien#32;a#32;mangé l#39;os" //Remplacement des caracteres champ = champ.replace(appReplace,"#39;"); champ = champ.replace(espReplace ,"#32;");

mais si j'applique comme ça, ça me retourne en string : "Le"

J ai vu que la fonction replace() ne s'occupait que de la premiere occurance trouvée, donc j ai appliqué "/g" à la fin de mes regexp pour prendre en compte toute la chaine de caractere, mais toujours pas.
Je n ai pas vraiment d'idée, merci pour l'aide :)

Re: Remplacement de caractère avec javascript

Posté : 19 mai 2010, 10:53
par Genova
J'ai testé ton code chez moi et ça fonctionne bien (j'ai viré les & car ils s'affichent mal sur le forum), ça me donne ça :

Code : Tout sélectionner

Le#32;chien#32;a#32;mange#32;l#39;os

Re: Remplacement de caractère avec javascript

Posté : 19 mai 2010, 11:30
par BaLiSTiK
Je viens de retester et encore pareil, je ne comprends pas :s.
La chaine de caractere sur laquelle je souhaite appliquer ça est incluse dans un fichier au format sld (style d'une couche géographique), et écrite en XML.

De plus cette chaine est la clé d'un tableau, que je parcours via une boucle. Ce qui donne ceci :

Code : Tout sélectionner

var champ = "Etat d'avancement"; var appReplace = new RegExp(/\'/g); var espReplace = new RegExp(/\b/g); //On replace les espaces et les apostrophes apr leur caracteres ASCII champ = champ.replace(appReplace,"#39;"); champ = champ.replace(espReplace, "#32;"); if (typeRepresentation == "polygone") { for (var iClasse in tabCouleurs) { var classe = tabCouleurs[iClasse]; var couleur = classe.style; var valeur = classe.valeur if(typeAnalyse == "unique"){ valeur = valeur.replace(appReplace,"#39;"); valeur = valeur.replace(espReplace, "#32;"); var rule = '<Rule>\r' + '<Name>' + valeur + '</Name>\r' + '<Title>' + valeur + '</Title>\r' + '<Abstract>Valeurs uniques</Abstract>\r' + '<ogc:Filter>\r' + ' <ogc:PropertyIsEqualTo>\r' + ' <ogc:PropertyName>' + champ + '</ogc:PropertyName>\r' + ' <ogc:Literal>' + valeur + '</ogc:Literal>\r' + ' </ogc:PropertyIsEqualTo>\r' + '</ogc:Filter>\r' + '<PolygonSymbolizer>\r' + ' <Fill>\r' + ' <CssParameter name="fill">' + couleur + '</CssParameter>\r' + ' <CssParameter name="fill-opacity">1</CssParameter>\r' + ' </Fill>\r' + ' <Stroke>\r' + ' <CssParameter name="stroke">' + couleur + '</CssParameter>\r' + ' <CssParameter name="stroke-width">2</CssParameter>\r' + ' </Stroke>\r' + '</PolygonSymbolizer>\r' + '</Rule>\r'; } }
Le tableau tabCouleurs est un tableau au format JSON avec en clé une valeur au champ texte et en valeur, un code couleur en héxa

Re: Remplacement de caractère avec javascript

Posté : 19 mai 2010, 18:28
par stealth35
pourquoi tu remplaces que les espaces et les apostrophes ?

Re: Remplacement de caractère avec javascript

Posté : 01 juin 2010, 10:37
par BaLiSTiK
Je répond avec retard, désolé, ce code est plus ou moins laissé en attente, mais je vais quand même répondre.
Les balises contenant <ogc:PropertyName> et <ogc:Literal> correspondant à un nom de champ Postgresql et sa valeur. En gros, Si la valeur du champ xxxx correspond à "valeur", alors on dessine un polygone. Le soucis est que lorsque Geoserver exécute la requête SQL, il interprète mal les champs avec espaces et accents (alors qu'en SQL, mettre les champs entre guillemets résoudrai le problème). D'ou l'idée de les écrire en ASCII mais ça resolait pas le soucis.

Mais on va surement renommer les champs des vues (on utilise des vues pour la cartographie et non les tables de la BD directs).