JeuWeb - Crée ton jeu par navigateur
[Résolu][Javascript] replace() avec des tableaux - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu][Javascript] replace() avec des tableaux (/showthread.php?tid=3632)

Pages : 1 2


[Résolu][Javascript] replace() avec des tableaux - Astrea - 03-02-2009

Bonjour,

J'aimerais savoir comment faire pour remplacer plusieurs caractères d'une chaine par un équivalent. Ayant déjà été confronté à ce problème en php, j'ai adapté la fonction à javascript. Il se trouve qu'il est pas envie de bosser...

En php, qui fonctionne bien
Code :
function encodeUTF8($tab)
{
    $search = Array('|', 'é', 'è', 'ê', 'ë', 'à', 'ä', 'â', 'ù', 'û', 'ô', 'ö', 'ç', 'î', 'ï', 'œ', 'É', 'È', 'Ê', 'À', 'Ç', '"', '“', '”', '«', '»', "'", "'", "‘", "’", "'", "...", "…");
    $replace = Array('&', 'é', 'è', 'ê', 'ë', 'à', 'ä', 'â', 'ù', 'û', 'ö', 'ö', 'ç', 'î', 'ï', 'œ', 'É', 'È', 'Ê', 'À', 'Ç', '"', '“', '”', '«', '»', ''', ''', '‘', '’', '´', '…', '…');
    $tab = str_replace($search, $replace, $tab);
    return $tab;
}

Code Javascript, qui apparement n'aime pas les tableaux dans le replace()
Code :
function encodeUTF8(chaine)
{
    search = new Array('é', 'è', 'ê', 'ë', 'à', 'ä', 'â', 'ù', 'û', 'ô', 'ö', 'ç', 'î', 'ï', 'œ', 'É', 'È', 'Ê', 'À', 'Ç', '"', '“', '”', '«', '»', "'", "'", "‘", "’", "'", "...", "…");
    replace = new Array('é', 'è', 'ê', 'ë', 'à', 'ä', 'â', 'ù', 'û', 'ö', 'ö', 'ç', 'î', 'ï', 'œ', 'É', 'È', 'Ê', 'À', 'Ç', '"', '“', '”', '«', '»', ''', ''', '‘', '’', '´', '…', '…');
    for(var i=0; i<=search.length; i++)
    {
        chaine = chaine.replace(search[i], replace[i]);
    }
    return chaine;
}

Edit : Il y a de l'avancement, j'ai rajouté un for(var i=0; i<=search.length; i++) au dessus du chaine.replace, ça marche tant qu'il n'y à pas plus d'un seul caractère à modifier dans chaque cas.
exemple : si j'ai une chaine avec "é, ô, à, è, é, à", je me retrouve avec "'&eacute;, $ocirc;, &agrave, &egrave, é, à"...

Si vous avez une piste pour régler ce problème d'accents qui apprécient pas l'Ajax, je suis preneur. :bave:

Re-Edit : finalement je la joue bourrin, j'ai copier-coller la fonction php encodeUTF8 que j'ai renommé et j'ai remplacer les & par des | dans $replace, et sur l'évènement, j'appelle cette fonction. Et je retraduit après en php, avant le traitement Ajax.


RE: [Résolu] [javascript] replace avec des tableaux - Anthor - 03-02-2009

Euh rien a voir avec l'encodage UTF8 mon ami, la tu fais plus un htmlentities...


RE: [Résolu][Javascript] replace() avec des tableaux - Argorate - 03-02-2009

Oui mais il le fait parce qu'il a les accents et autres caractères a la noix, qui s'affiche mal à cause de l'encodage de la page je suppose.


RE: [Résolu][Javascript] replace() avec des tableaux - Anthor - 03-02-2009

Et alors ?


RE: [Résolu][Javascript] replace() avec des tableaux - Allwise - 03-02-2009

Astrea, en php tu as une fonction qui s'appelle utf8_encode, et qui encode une chaîne en UTF.
T'as aussi une fonction qui s'appelle htmlentities et qui convertit les caractères spéciaux en leurs entités html équivalentes.
Tu nommes ta fonction comme la première, et tu lui fais faire le job de la deuxième.
Soit tu as besoin de l'une, soit de l'autre Smile

Quoi qu'il en soit, si t'as probs avec les données issues d'une requête Ajax ( ce qui est manifestement le cas ), tu dois les encoder en UTF8 avant leur retour.


RE: [Résolu][Javascript] replace() avec des tableaux - Astrea - 03-02-2009

Allwise, je connais la fonction utf8_encode, mais lorsque je l'ai utilisé il y a peu, elle ne fonctionné pas comme je l'aurais voulu, du coup je l'ai remasterisée.
Pour ce qui est du htmlentities, il se trouve que j'avais un soucis avec les apostrophes ou les quotes si je me souviens bien...


RE: [Résolu][Javascript] replace() avec des tableaux - Argorate - 03-02-2009

Anthor: le rapport c'est qu'il a utilisé des utf8_encode() et que cela ne fonctionné pas malgré tout, d'où la création de sa fonction. ^^


RE: [Résolu][Javascript] replace() avec des tableaux - Anthor - 03-02-2009

(03-02-2009, 06:00 PM)Argorate a écrit : Anthor: le rapport c'est qu'il a utilisé des utf8_encode() et que cela ne fonctionné pas malgré tout, d'où la création de sa fonction. ^^

Ben je vois toujours pas Big Grin


RE: [Résolu][Javascript] replace() avec des tableaux - Allwise - 03-02-2009

Astrea, je mettrais plutôt [esquivé] ou [feinté] que [résolu] Big Grin
Je te conseille d'identifier clairement ton problème : encodage ? échappement ? les deux ? Quand tu dis que utf8_encode fonctionnait pas comme tu l'entendais, tu veux dire quoi au juste ?
D'identifier le contexte : ça merde dans la réponse d'un requête Ajax ? ou tu utilises l'ajax pour faire en php un truc que t'arrives pas à mettre en place en javascript ?
Et ensuite, de t'attaquer à la résolution du problème, en cherchant des cas similaires ou en le postant ici clairement Smile

C'est quand même mieux de comprendre un problème que de le laisser de côté, tu crois pas ?


RE: [Résolu][Javascript] replace() avec des tableaux - Astrea - 03-02-2009

Non, je dois récupérer la désignation d'un élément et l'afficher dans une popin avec un formulaire, le tout en multi-langue. utf8_encode retourné un truc qui me convenait pas, je pourrais pas te dire pourquoi, je m'en rappel plus exactement, mais j'avais créé encode_UTF8 au départ par rapport au caractère japonais que j'ai donc tout simplement récupéré ici en supprimant l'inutile.
Ensuite, j'avais pas envie (sûrement à tort) de refaire des connections BDD dans mon traitement de la popin juste pour des accents à la con que j'aurais pas forcément tout le temps. Je cherchais un truc plus simple vite fait.


=>C'est quand même mieux de comprendre un problème que de le laisser de côté, tu crois pas ?

Entièrement d'accord, j'ai voulu utiliser replace() en JS comme je l'utilise en PHP, déjà j'avais tort puisque je peux pas balancer des tableaux dedans. Puis surtout que le problème des accents se créé lors de l'envoi de la variable contenant la chaine par GET et non pas sur l'event JS. Ce que j'ai remarqué plus tard et d'où en découle les moyens utilisés pour que l'utilisateur est une phrase 100% compréhensible.
Après je m'en fou de savoir comment tant que ça marche et que ça prend pas 3 plombes.
En tout cas, je ne retire pas ta précision sur le fait que j'ai plus esquivé que résolu, mais au moins j'ai ce que je veux.