Remplacement de caractère avec javascript

Eléphant du PHP | 398 Messages

19 mai 2010, 08:48

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 :)
Modifié en dernier par BaLiSTiK le 19 mai 2010, 11:05, modifié 2 fois.
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe

ViPHP
ViPHP | 928 Messages

19 mai 2010, 10:53

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

Eléphant du PHP | 398 Messages

19 mai 2010, 11:30

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
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe

ViPHP
ViPHP | 5462 Messages

19 mai 2010, 18:28

pourquoi tu remplaces que les espaces et les apostrophes ?

Eléphant du PHP | 398 Messages

01 juin 2010, 10:37

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).
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe