2010-04-30 14 views
6

Ho un semplice modulo che genera una nuova galleria fotografica, inviando il titolo e una descrizione a MySQL e reindirizzando l'utente a una pagina in cui possono caricare le foto.E commerciale in GET, PHP

Tutto ha funzionato fino a quando la e commerciale non ha inserito l'equazione. Le informazioni vengono inviate da una finestra di dialogo modale jQuery a una pagina PHP che quindi invia la voce al database. Dopo Ajax completa con successo, l'utente viene inviato alla pagina di upload con un URL GET per raccontare la pagina di quello dell'album si sta caricando per -

$.ajax ({ 
    type: "POST", 
    url: "../../includes/forms/add_gallery.php", 
    data: $("#addGallery form").serialize(), 
    success: function() { 
     $("#addGallery").dialog('close'); 
     window.location.href = 'display_album.php?album=' + title; 
    } 
}); 

Se il titolo ha una e commerciale, il campo Titolo nella pagina di caricamento non viene visualizzato correttamente. C'è un modo per fuggire dall'ampersand per GET?

Grazie

risposta

13

In generale si vorrà URL-encode tutto ciò che non è completamente alfanumerico quando vengono passati come parti di URL.

Nella codifica URL, & viene sostituito con %26 (perché 0x26 = 38 = il codice ASCII di &).

Per fare questo in Javascript, è possibile utilizzare la funzione di encodeURIComponent:

$.ajax ({ 
    type: "POST", 
    url: "../../includes/forms/add_gallery.php", 
    data: $("#addGallery form").serialize(), 
    success: function() { 
     $("#addGallery").dialog('close'); 
     window.location.href = 'display_album.php?album=' + encodeURIComponent(title); 
    } 
}); 

Nota che escape ha lo svantaggio che + non è codificato, e saranno decodificati serverside come uno spazio, e quindi dovrebbe essere evitato (source).

Se si desidera eseguire questo serveride a livello di PHP, è necessario utilizzare la funzione urlencode.

+1

Credo che "titolo" venga aggiunto all'URL in javascript, dall'input dell'utente - non è possibile utilizzare l'urlencode() di PHP in questo contesto. Ignacio ha capito bene - la codifica deve essere fatta in javascript, nel caso dell'OP. In altri contesti, tuttavia, urlencode() sarebbe la funzione giusta da usare. –

+1

La risposta è stata aggiornata per riflettere questo. :) –

+0

Grazie! Ha funzionato magnificamente Questo è il motivo per cui testiamo e testiamo le nostre pagine :) – NightMICU

1
window.location.href = 'display_album.php?album=' + encodeURIComponent(title); 

la funzione JavaScript escape non codificare questi caratteri: * @ - _ +. /. Quindi se hai titolo come "questo + quello", il segno più sarà interpretato come uno spazio e PHP riceverà la variabile come "questo".

L'utilizzo di encodeURIComponent codifica anche i seguenti caratteri:, /? : @ & = + $ #