Codifica/escape stringa da PHP a Javascript

Costruendo un piccolo editor di testo, mi sono imbattuto in un problema non proprio semplice: dovevo passare il testo di default preso dal database dentro all’area di testo tramite Javascript.

L’area di testo è un iframe e quindi l’unico modo per metterci mano è utilizzando Javascript.
Il problema sta nel passaggio di stringhe con apici e codice html. A volte crea degli errori che non si capisce da cosa siano dati.

Ho trovato direttamente nella documentazione di php.net una simpatica funzione che fa al caso nostro. Fa l’escape di una stringa passata in modo tale da poterla decodificare con una funzione base di JS: unescape!

function escape($in)
{
  $out = '';
  for ($i=0;$i<strlen($in);$i++)
  {
    $hex = dechex(ord($in[$i]));
  if ($hex=='')
    $out = $out.urlencode($in[$i]);
  else
    $out = $out .'%'.((strlen($hex)==1) ? ('0'.strtoupper($hex)):(strtoupper($hex)));
  }
  $out = str_replace('+','%20',$out);
  $out = str_replace('_','%5F',$out);
  $out = str_replace('.','%2E',$out);
  $out = str_replace('-','%2D',$out);
  return $out;
}

Così codificando la stringa dalla pagina php con la funzione escape:

<script>
nomefunzionejs("<?=escape($stringa)?>");
</script>

si otterrà la stringa codificata, che potrà essere riconvertita a piacimento direttamente da javascript con:

function nomefunzionjs(stringa){

var stringa = unescape(stringa);

}

Mi ci è voluto un pò a trovarla ma vi assicuro che funziona, anche con codice html!

Annunci

, , , , , , , , ,

  1. Lascia un commento

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: