2010-04-30 8 views
6

J'ai un formulaire simple qui génère une nouvelle galerie photo, envoyant le titre et une description à MySQL et redirigeant l'utilisateur vers une page où ils peuvent télécharger des photos. Tout s'est bien passé jusqu'à ce que l'esperluette entre dans l'équation. Les informations sont envoyées à partir d'une boîte de dialogue modale jQuery vers une page PHP qui soumet ensuite l'entrée à la base de données. Après l'Ajax se termine avec succès, l'utilisateur est envoyé à la page de téléchargement avec une URL GET pour dire la page quel album il est le téléchargement à -Ampersand dans GET, PHP

$.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; 
    } 
}); 

Si le titre a une esperluette, le champ Titre sur la page de téléchargement ne s'affiche pas correctement. Y a-t-il un moyen d'échapper à l'esperluette pour GET?

Merci

Répondre

13

En général, vous aurez envie de URL-encode tout ce qui est pas complètement lorsque vous les alphanumérique passer en tant que parties de vos URL.

Dans le codage d'URL, & est remplacé par %26 (parce que 0x26 = 38 = le code ASCII de &).

Pour ce faire, en Javascript, vous pouvez utiliser la fonction 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); 
    } 
}); 

Notez que escape présente l'inconvénient que + n'est pas encodées, et sera décodée Serverside comme un espace, et donc il faut éviter (source).

Si vous souhaitez faire cela côté serveur au niveau PHP, vous devrez utiliser la fonction urlencode.

+1

Je crois que "titre" est ajouté à l'URL en javascript, à partir de l'entrée de l'utilisateur - il n'y a aucune possibilité d'utiliser l'urlencode() de PHP dans ce contexte. Ignacio a raison - l'encodage doit être fait en javascript, dans le cas de l'OP. Dans d'autres contextes, urlencode() serait la bonne fonction à utiliser, cependant. –

+1

La réponse a été mise à jour pour refléter cela. :) –

+0

Merci! A travaillé magnifiquement. C'est pourquoi nous testons et testons nos pages :) – NightMICU

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

La fonction javascript escape n'encoder ces caractères: * @ - _ +. /. Donc, si vous avez un titre comme "this + that", le signe plus sera interprété comme un espace et PHP recevra la variable "this that".

L'utilisation du encodeURIComponent codera également les caractères suivants:, /? : @ & = + $ #