+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Javascript indirizzo src errato.

  1. #1
    criccroc non è in linea Novello
    Post
    27

    Javascript indirizzo src errato.

    Tramite una funzione javascript, vado a creare il link del sito web che voglio visitare in questo modo:

    codice:
    function myFunction(nome) {
       var nominativo= nome;
       iframe.src = 'sito.php?nome=' + nominativo;
    }
    Ora tutto funziona se il nome ha un nome comune (es: "Mario Rossi"), ma se il nome contiene il carattere "+" (es: "Mario + Rossi") genero un errore.

    Come posso risolvere il problema?

  2. #2
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Luogo
    Reggio Emilia
    Post
    1,057
    Devi sostituire gli spazi, o più in generale i caratteri "speciali", con il relativo codice del carattere, poiché nell'URL non possono esserci spazi o caratteri non ammessi.
    Ad esempio, lo spazio va espresso con %20: sito.php?nome=Mario%20Rossi.

    Prova a cercare una libreria che magari implementi già questo tipo di conversione e copra un'ampia gamma di casistiche già note.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  3. #3
    criccroc non è in linea Novello
    Post
    27
    Ok grazie _alka_ Ho risolto sostituendo il carattere "+" con "%2b" affinchè il nominativo sia cosi:

    nominativo= "Mario%2bRossi" , dove "%2b" sostituisce appunto il carattere "+" in questo caso.

    Grazie per l'aiuto.

  4. #4
    criccroc non è in linea Novello
    Post
    27
    Pensavo di aver risolto totalmente, ed invece altro ostacolo. Risolto un problema se ne presenta un'altro simile.

    Ho risolto il problema con il carattere "+"
    nominativo= nominativo.replace( '+', '%2b' );
    ma se il nome è "D'Angelo" ??

    Ho provato cosi ma non funziona:
    nominativo= nominativo.replace("'", "%27");

  5. #5
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Post
    2,716
    alka te l'aveva detto: non limitarti al carattere "+". Guarda la funzione urlencode.
    Il regolamento del forum: la prima cosa da leggere.

  6. #6
    criccroc non è in linea Novello
    Post
    27
    Sto facendo prove una dopo l'altra da quando ho risposto (alle 17.21) fino ad ora, e nel frattempo ho scoperto che il problema nasce precedentemente.

    Tramite il comando ONCLICK trasmetto il cognome da elaborare alla mia funzione in questo modo:
    codice:
    onclick="myFunction('Stefano d'Orazio')"
    e giustamente è qui che bisogna intervenire, perchè cosi facendo il codice viene interrotto. (da un doppio apostrofo).

    Per quanto riguarda urlencode stavo provando il comando encodeURIComponent, che ho inserito appunto dentro myFunction() che purtroppo non risolve il mio caso perchè non coverte il carattere "apostrofo" anche se converte gli altri.
    codice:
    nome= encodeURIComponent(nome);

  7. #7
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Post
    2,716
    Usa la funzione str_replace per anteporre all'apostrofo il carattere di escape.
    Il regolamento del forum: la prima cosa da leggere.

  8. #8
    criccroc non è in linea Novello
    Post
    27
    Caro Brontolo, non penso che sia questa la soluzione.
    Da quello che ho capito non bisogna utilizzare il carattere di escape (\') perchè anche in questo caso generi una chiusura di doppi apostrofi, ma sarebbe meglio utilizzare il codice URL ENCODED %2C (visto che poi questa variabile viene utilizzata per creare un indirizzo web), ma per chiarire meglio a tutti il problema, ho estrapolato la parte di codice incriminata affinchè potete fare anche voi le vostre prove

    codice:
    <button type="button" onclick="nominativo = 'Mario Rossi'; myFunction(nominativo)">
    
    	<span>Vedi informazioni</span>
    </button>
    				
    <script type='text/javascript'>
    	function myFunction(nominativo) {
    		alert(nominativo);
    		iframe.src = 'nomesito.php?nome=' + nominativo;
    	}
    </script>
    Tralasciando la parte iframe (non e' questo il problema), questa funzione determina la variabile nominativo , che in questo caso non ha nessun apostrofo e di conseguenza FUNZIONA, ma se provate a cambiare 'Mario Rossi' in 'Stefano d'Orazio' (come vedete ci sono 3 apostrofi) NON FUNZIONA.

    Essendo una VARIABILE generata dal mio programma (che può contenere un apostrofo oppure no), giustamente non posso semplicemente risolvere il problema manualmente in questo modo: nominativo = 'Stefano d%2COrazio', ma serve appunto una funzione o un comando che raggira l'ostacolo.

  9. #9
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Post
    2,716
    E' vero, il carattere di escape non va bene in questo caso, avevo trascurato il fatto che si tratta di un URL.
    Immagino però che alla funzione venga passata una variabile e non la costante "Mario Rossi" o "Stefano D'Orazio". La sostituzione dell'apostrofo con %2C la devi fare sulla variabile che passi alla funzione, non all'interno di questa.
    Il regolamento del forum: la prima cosa da leggere.

  10. #10
    criccroc non è in linea Novello
    Post
    27
    Purtroppo per una serie di ragioni (utilizzo TinyButStrong... non so se conosci) non posso fare nulla altrove, anche perchè questa parte di programma fa parte di un blocco <div>, che nel caso di TinyButStrong è simile ad un ciclo DO .. WHILE.
    In effetti la corretta parte di progamma sarebbe questa:
    codice:
    onclick="myFunction('[blkfeatured.nome_cliente]')">
    Ora se conosci TinyButStrong capirai di cosa sto parlando, altrimenti immagina che è come se dicessi questo:
    <?echo $nome_cliente ?>

    Non posso trasformare $nome_cliente perchè altrimenti in una precedente visualizzazione non leggerei:
    Nominativo = Stefano d'Orazio ma Nominativo = Stefano d%2COrazio (cosa che volendo si potrebbe anche risolvere con dei comandi aggiuntivi).

    Avevo pensato difatti di fare uno script javascript che trasforma la variabile in quello che mi serve, ma essendo appunto simile ad un ciclo do while... la variabile sarà uguale all'ultimo record in questione.

    Comunque a mio avviso bisogna concentrarsi esclusivamente sul comando ONCLICK. E' qui che dobbiamo intervenire in qualche modo tramite una funzione o tramite un comando.

+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi