Sia nei linguaggi di mark - up che nel codice Javascript può essere necessario usare dei caratteri di "escape". Ad esempio le seguenti dichiarazioni iniziali genereranno un errore:
<input type="hidden" value="<xml titolo="titolo">ciao</xml>"
var testo = "<xml titolo="titolo">ciao</xml>"
Nel primo caso ci troviamo in ambiente HTML: il browser non riesce ad interpretare correttamente la sequenza degli apici e concluderà la stringa dopo titolo=; l'errore non è bloccante, ma i doppi apici vanno sostituiti con apici semplici. Ecco la versione corretta:
<input type="hidden" value="< xml titolo='titolo'> ciao</xml>"
Nel secondo caso ci troviamo in ambiente Javascript: il compilatore non riesce ad interpretare correttamente la sequenza di doppi apici e si blocca; è sufficiente anteporre agli apici il carattere di escape :
var testo = "<xml titolo="titolo">ciao</xml>"
Questi errori possono accadere solamente nelle stringhe iniziali, cioè quelle che effettivamente appaiono "scritte": le stringhe registrate in memoria non hanno alcuna limitazione riguardo ai caratteri. Perciò sono due le situazioni a rischio di errore:
- nel codice scritto a mano: è sufficiente ricordarsi di aggiungere i caratteri di escape;
- nel codice generato dallo script (ad esempio per il parametro del metodo window.open): servono delle funzioni che in automatico aggiungano gli escape al testo scritto e poi li levino nelle variabili.
Di seguito potete trovare due funzioni Javascript: la prima gestisce il mark - up, la seconda i doppi apici. Ad entrambe corrisponderà una contro - funzione che annulla l'effetto.
function detag (text)
{
var a, b, c;
while (true)
{
a = text.indexOf("<");
b = text.substring(0,a);
c = text.substring(a + 1, text.length)
if (a== -1) break;
text = b + "<" + c
}
while (true)
{
a = text.indexOf(">");
b = text.substring(0,a);
c = text.substring(a + 1, text.length)
if (a== -1) break;
text = b + ">" + c
}
this.buffer = text
}
function deapix (text)
{
var a, b, c;
while (true)
{
a = text.indexOf(""");
b = text.substring(0,a);
c = text.substring(a + 1, text.length)
if (a== -1) break;
text = b + "'" + c
}
this.buffer = text
}