# Webmasters - Dveloppement Web > Autres langages pour le Web > Coldfusion >  Perte des accents et autres caractres spciaux.

## pacific

J'ai fait un formulaire flash contenant quelques cftextarea et je voudrais que ds que l'utilisateur change de cftextarea ma base de donne soit automatiquement mise  jour sans que l'utilisateur ai donc a valider quoi que ce soit. J'ai pour cela rajout du code actionscript dans les onBlur de mes cftextarea malheureusement j'ai ce souci :

Si j'ordone le submit() des qu'un de mes cftextarea est modifi je suis donc oblig d'ouvrir le rsultat dans une autre fentre ou frame or je veux que la mise  jour de la bdd soit transparente (dommage car dans ce cas la mise  jour de la base se fait corectement sans perte des caractres spciaux).

L'autre solution tait d'utiliser sendAndLoad() ou loadVariables(), j'ai reussi a utiliser ces deux fonctions avec succs et la bdd se met a jour automatiquement sans besoin de validation malheureusement tout mes accents et retour a la ligne sont perdus.

Comment puis-je faire pour ne pas perdre tout les caractres spciaux ?

Merci  vous.
Yoann

----------


## pacific

Je me rpond  moi mme puisque j'ai trouv une solution et cela pourra peut-tre servir  d'autres :

Je suis donc pass par loadVariables() et je passe donc mes donnes en argument dans l'URL (par ex 'modif.cfm?value=coucou'), par contre pour ne pas perdre les caractres spciaux j'ai programm une fonction qui converti ma chane de caractres en utf-8 sous la forme hexa, par example le symbole euro est %E2%82%AC.

Voici la formule, je suis parti d'une fonction bidon qui encodait un peu betement et je l'ai optimis avec un while :

  var string = 'texte  1 avec pleins de caractres bizares !';
  var utftext = '';
  for (var n = 0; n < string.length; n++)
  {
  	var c = string.charCodeAt(n);
    var t = '0123456789ABCDEF';
    var utfpart = '';
    if(c < 128)
    {
      utfpart = '%' + t.charAt(Math.floor(c / 16)) + t.charAt(c - (Math.floor(c / 16)) * 16);
    }
    else
    {
    	var valeurComp = 64;
      var valeurDecalA = 0;
      var valeurDecalB = 6;
      var valeurOR = 192;
      do
      {
        valeurComp *= 32;
        var d = 128 | c >> valeurDecalA & 63;
        utfpart = '%' + t.charAt(Math.floor(d / 16)) + t.charAt(d - (Math.floor(d / 16)) * 16) + utfpart;
      	if(c < valeurComp)
        {
          d = valeurOR | c >> valeurDecalB;
          utfpart = '%' + t.charAt(Math.floor(d / 16)) + t.charAt(d - (Math.floor(d / 16)) * 16) + utfpart;
        }
        valeurDecalA += 6;
        valeurDecalB += 6;
        valeurOR = valeurOR >> 1 | 128;
      } while(c >= valeurComp);
    }
    utftext += utfpart;
  }
  loadVariables('UpdateBDD.cfm?textSaisie=' + utftext, this, 'POST');

Par contre je viens de me rendre compte en ecrivant ce message que du coup la longueur du texte de l'URL est limit  256 caractres et que je ne pourrait donc pas transmettre des donnes trop longue...

Je laisse quand mme la fonction qui pourra peut tre servir  d'autres...

A+
Yoann Levet

----------

