2010-04-30 77 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也將編碼以下字符:,/? :@ & = + $#