2010-04-30 25 views
6

Tôi có một biểu mẫu đơn giản tạo thư viện ảnh mới, gửi tiêu đề và mô tả cho MySQL và chuyển hướng người dùng đến trang nơi họ có thể tải ảnh lên.Ampersand in GET, PHP

Mọi thứ hoạt động tốt cho đến khi dấu và được nhập vào phương trình. Thông tin được gửi từ một hộp thoại jQuery modal đến một trang PHP sau đó gửi mục nhập vào cơ sở dữ liệu. Sau Ajax hoàn tất thành công, người dùng được gửi đến trang tải lên với một URL GET nói với trang gì album nó được tải lên -

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

Nếu tiêu đề có một dấu, lĩnh vực Tiêu đề trên trang tải lên không hiển thị đúng cách. Có cách nào để thoát khỏi dấu và cho GET?

Cảm ơn

Trả lời

13

Nói chung bạn sẽ muốn URL-encode bất cứ điều gì đó không phải là hoàn toàn alphanumerical khi bạn vượt qua chúng như một phần của URL của bạn.

Trong mã hóa URL, & được thay thế bằng %26 (vì 0x26 = 38 = mã ASCII là &).

Để làm điều này trong Javascript, bạn có thể sử dụng chức năng 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); 
    } 
}); 

Lưu ý rằng escape có những bất lợi mà + không được mã hóa, và sẽ được giải mã serverside như một không gian, và do đó nên tránh (source).

Nếu bạn muốn thực hiện việc này ở cấp độ PHP, bạn sẽ cần sử dụng hàm urlencode.

+1

Tôi tin rằng "tiêu đề" đang được thêm vào URL trong javascript, từ đầu vào của người dùng - không có cơ hội sử dụng url urlode của PHP() trong ngữ cảnh này. Ignacio đã làm đúng - mã hóa cần phải được thực hiện trong javascript, trong trường hợp của OP. Trong các ngữ cảnh khác, urlencode() sẽ là hàm thích hợp để sử dụng. –

+1

Câu trả lời đã được cập nhật để phản ánh điều này. :) –

+0

Cảm ơn! Làm việc rất đẹp. Đây là lý do tại sao chúng tôi kiểm tra và kiểm tra các trang của chúng tôi :) – NightMICU

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

Chức năng javascript escape sẽ không mã hóa các ký tự sau: * @ - _ +. /. Vì vậy, nếu bạn có tiêu đề như "this + that", dấu cộng sẽ được hiểu là không gian và PHP sẽ nhận biến là "this that".

Sử dụng encodeURIComponent cũng sẽ mã hóa các ký tự sau:, /? : @ & = + $ #