2012-09-25 32 views
7

Tôi luôn có thể kiểm tra điều này, nhưng tôi muốn có một câu trả lời chính thức từ một chuyên gia PHP (điều tôi chắc chắn nhất không).Yêu cầu PHP với nhiều chuỗi truy vấn

Nếu ai đó làm cho một yêu cầu như thế này:

http://www.somedomain.com/a.php?param1=value1&param2=value2&param3=value3?param1=value4&param2=value5&param3=value6 

Những loại hậu quả là có khi tôi cố gắng để truy cập _GET['param2'], ví dụ? Có vẻ như tôi chỉ nhận được giá trị đầu tiên. Trong trường hợp này, nó sẽ trả về value2. Đó là hành vi mong đợi?

Dấu chấm hỏi thứ hai có ảnh hưởng gì không? Sẽ có lỗi, ví dụ?

+0

Tôi không biết chắc chắn nhưng có thể gây ra lỗi phân tích cú pháp. Trình phân tích cú pháp có thể mong đợi mã thông báo '&' sau 'value2' nhưng gặp phải '?' Và do đó, nó chỉ cần bỏ phân tích cú pháp yêu cầu. –

+0

Câu hỏi có liên quan: [Vị trí ủy quyền của các khóa truy vấn HTTP trùng lặp GET] (http://stackoverflow.com/questions/1746507/authoritative-position-of-duplicate-http-get-query-keys) – Wiseguy

+0

bạn có thể sử dụng nhiều dấu phân tách trong arg_separator –

Trả lời

3

Nó chỉ là định dạng cuối cùng được xác định. Việc xác định tham số nhiều hơn một lần trong chuỗi truy vấn chỉ chạy nguy cơ nhận các kết quả có khả năng gây nhầm lẫn. Tốt nhất là xác thực chuỗi truy vấn của bạn trong những trường hợp này, ít nhất đó là những gì Tôi làm.

Dấu chấm hỏi thứ hai sẽ được coi là một phần của giá trị cho tham số trước đó.

2

Bạn, chính thức, không được yêu cầu có hai ? trong chuỗi truy vấn. Nếu bạn làm như vậy, kết quả là không xác định. Một số nền tảng (như PHP) sẽ xử lý các ký tự ? tiếp theo giống như & ký tự và cho phép các giá trị/cặp đó. Những người khác sẽ chỉ coi giá trị cho param3value3?param1=value4.

Câu trả lời ngắn: không làm điều này. Nó trở nên sôi nổi. Và, với tư cách là một tác giả máy chủ, người ta phải luôn luôn xác thực các giá trị tham số một cách cẩn thận để đảm bảo các giá trị có ý nghĩa.

Các vấn đề liên quan