2010-04-30 84 views
6

我有一个简单的表单,它生成一个新的照片库,向MySQL发送标题和描述,并将用户重定向到他们可以上传照片的页面。GET中的&符号PHP

一切工作正常,直到&符号输入公式。信息从jQuery模态对话框发送到PHP页面,然后将该条目提交到数据库。阿贾克斯成功完成后,用户被发送到上传页面用GET URL该怎么告诉专辑被上传到网页 -

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

如果标题有一个符号,标题字段上传页面上无法正常显示。有没有办法逃避GET&符号?

感谢

回答

13

一般来说你要URL-encode什么,当你将它们作为你的URL的部分是不完全字母数字。

在URL编码中,&被替换为%26(因为0x26 = 38 = &的ASCII码)。

要做到这一点在JavaScript中,你可以使用函数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); 
    } 
}); 

注意escape的缺点是+没有编码,并且将被解码服务器端的空间,因此,应避免(source)。

如果您希望在PHP级别执行此服务器,您需要使用函数urlencode

+1

我相信“标题”被追加到JavaScript中的URL中,从用户输入 - 在这种情况下没有机会使用PHP的urlencode()。 Ignacio是对的 - 编码需要在javascript中完成,在OP的情况下。在其他上下文中,尽管如此,urlencode()将是正确的函数。 – 2010-04-30 22:35:24

+1

答案已经更新,以反映这一点。 :) – 2010-04-30 22:38:31

+0

谢谢!工作很好。这就是为什么我们测试和测试我们的网页:) – NightMICU 2010-04-30 23:07:20

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

javascript escape函数不会对这些字符进行编码:* @ - _ +。 /。所以如果你有像“this + that”这样的标题,那么加号将被解释为一个空格,而PHP将接收变量为“this that”。使用encodeURIComponent也将编码以下字符:,/? :@ & = + $#