Newsgroup: it.comp.lang.javascript
Titolo: apostrofo in url

Ciao,
chiamo una funzione javascript ma ricevo questo errore dalla console di 
Firefox:
Errore: missing ) after argument list
File sorgente:
javascript:openPop('popup.htm?nome=caldazzini&tipo=maxi&nImg=0g.jpg&w=500&h=500&titolo=L%27asino%2Cvolante','generico','500','500')
Riga: 1, Colonna: 79
Codice sorgente:
openPop('popup.htm?nome=caldazzini&tipo=maxi&nImg=0g.jpg&w=500&h=500&titolo=L'asino,volante','generico','500','500')
La freccia indica che l'errore sta nella parola asino all'altezza 
dell'apostrofo. Poiché questo testo arriva dinamicamente, vorrei sapere 
come posso eliminare il problema (purtroppo la cosa è causa della non 
apertura del popup).
Grazie anticipatamente.

 openPop('popup.htm?nome=caldazzini&tipo=maxi&nImg=0g.jpg&w=500&h=500&titolo=L'asino,volante','generico','500','500')
Se è solo per quello basta usare " anziché ' per i parametri.
In generale se metti \ davanti al ' o " viene interpretato come carattere e
non come terminatore di stringa.
-- 
"Voi abili a tenere sempre un piede qua e uno là
 avrete un avvenire certo in questo mondo qua
 però la dignità
 dove l'avete persa?"
									    V.R.

ho capito il motivo, ma non riesco a risolvere, purtroppo:
la stringa al primo argomento viene creata all'interno di un file swf e 
poi passata alla funzione JavaScript esterna.
La porzione di codice AS implicata è questa:
openUrl='popup.htm?nome='+artista+'&tipo=maxi&nImg='+this.nJpg+'&w='+
this.ws
+'&h='+this.hs+'&titolo='+escape(this.titoli)+'';
 
trace(openUrl);
nome = "generico";							 
getURL("javascript:openPop('"+openUrl+"','"+nome+"','"+
this.ws
+"','"+this.hs+"')");
Ora, anche modificando openUrl nella maniera che suggerisci, ottengo lo 
stesso problema...
Grazie, comunque.


 getURL("javascript:openPop('"+openUrl+"','"+nome+"','"+
this.ws
+"','"+this.hs+"')");
un qualcosa del tipo openUrl.replace(/'/g,"`"); ?
-- 
"qualcuno è andato per età
 qualcuno perchè già dottore
 e insegue una maturità, si è sposato, fa carriera
 ed è una morte un po' peggiore"
									    F.G.

dall'interno del file swf non è possibile, purtroppo, almeno non nella 
versione di player per la quale posso esportare


 versione di player per la quale posso esportare
Non capisco...se dal file swf scrivi direttamente quella stringa, e quella
stringa è cannata, non so che dirti, alla pagina htm arriva già una stringa
js in errore, c'è poco da fare...


 versione di player per la quale posso esportare
In che senso? Non è possibile fare il replace o cos'altro?
Cmq quello che ti consigliava Cristiano all'inizio del topic, era di
modificare la suddetta stringa:
getURL("javascript:openPop('"+openUrl+"','"+nome+"','"+
this.ws
+"','"+this.hs+"')");
in qualcosa tipo:
getURL("javascript:openPop(\""+openUrl+"\",\""+nome+"\",\""+
this.ws
+"\",\""+this.hs+"\")");
in questo modo, sul browser, dovresti ottenere:
openPop("popup.htm?nome=caldazzini&tipo=maxi&nImg=0g.jpg&w=500&h=500&titolo=L'asino,volante","generico","500","500");
-- 
~ Religions change, but beer and wine remain.
(Harvey Allen)

la tua idea di prima forse potrebbe andare, magari con un workaround 
come questo:
var str = "L'asino";
var newStr = str.split("'").join("\\'");
trace(newStr);
sinceramente, non ho la minima idea del perché arrivi "cannata", dato 
che debugger e altri strumenti di controllo non danno errore. Di più: 
questo testo, che arriva dinamicamente dall'esterno, viene correttamente 
visualizzato nel file swf: solo quando viene usato per aprire il popup 
si genera questo errore.
Ti ringrazio molto.


vi ringrazio entrambi, tutto funziona adesso correttamente.
Purtroppo, virgolette e sequenze di escape non constribuiscono alla 
leggibilità di quel che uno scrive. Ciao!

scusate se aggiungo una cosa:
se nell'url capitano lettere accentate tipicamente à è ì ecc.ecc., con 
Firefox il popup non si apre, mentre con IE sì. Ho pensato si potesse 
trattare di un problema di URL encoding e quando chiamo window.open, al 
primo parametro scrivo escape(url) invece del solo url, ma non ottengo 
benefici. Che altro potrei fare?
Grazie.