Là một url như http://example.com/foo?bar
hợp lệ?
Tôi đang tìm kiếm một liên kết đến một cái gì đó chính thức nói cách này hay cách khác. Một câu trả lời có / không đơn giản hoặc bằng chứng giai thoại sẽ không cắt được.
Là một url như http://example.com/foo?bar
hợp lệ?
Tôi đang tìm kiếm một liên kết đến một cái gì đó chính thức nói cách này hay cách khác. Một câu trả lời có / không đơn giản hoặc bằng chứng giai thoại sẽ không cắt được.
Câu trả lời:
Các URI RFC không uỷ quyền cho một định dạng chuỗi truy vấn. Mặc dù người ta nhận ra rằng chuỗi truy vấn sẽ thường mang các cặp tên-giá trị, nhưng nó không bắt buộc (ví dụ: nó thường sẽ chứa một URI khác).
3.4. Truy vấn
Thành phần truy vấn chứa dữ liệu không phân cấp, cùng với dữ liệu trong thành phần đường dẫn (Mục 3.3), phục vụ để xác định tài nguyên trong phạm vi của lược đồ và quyền đặt tên của URI (nếu có). ...
... Tuy nhiên, vì các thành phần truy vấn thường được sử dụng để mang thông tin nhận dạng ở dạng cặp "key = value" và một giá trị được sử dụng thường xuyên là tham chiếu đến một URI khác, ...
HTML thiết lập rằng một biểu mẫu được gửi qua HTTP GET sẽ mã hóa các giá trị của biểu mẫu dưới dạng các cặp tên-giá trị ở dạng "? Key1 = value1 & key2 = value2 ..." (được mã hóa chính xác). Phân tích chuỗi truy vấn tùy thuộc vào mã phía máy chủ (ví dụ: công cụ Java servlet).
Bạn không xác định khung công tác phía máy chủ nào bạn sử dụng, nếu có, nhưng có thể khung công tác phía máy chủ của bạn có thể cho rằng chuỗi truy vấn sẽ luôn ở trong các cặp giá trị tên và nó có thể bị sặc trên một chuỗi truy vấn không phải là trong định dạng đó (ví dụ ?bar
). Nếu mã tùy chỉnh của riêng bạn phân tích chuỗi truy vấn, bạn chỉ cần đảm bảo bạn xử lý định dạng chuỗi truy vấn đó. Nếu là khung, bạn sẽ cần tham khảo tài liệu của mình hoặc chỉ cần kiểm tra nó để xem cách xử lý.
isindex
kỳ diệu name
từ HTML5 cho phép gửi một chuỗi truy vấn mà không cần định dạng giá trị khóa stackoverflow.com/a/37579004/895245
Chúng hoàn toàn hợp lệ. Bạn có thể coi họ là tương đương với anh chàng to lớn vạm vỡ đứng lặng lẽ đằng sau sứ giả mob. Anh chàng không có tên và không nói, nhưng sự hiện diện đơn thuần của anh ta truyền tải thông tin.
"Lược đồ" http "được sử dụng để định vị tài nguyên mạng thông qua giao thức HTTP. Phần này xác định cú pháp và ngữ nghĩa dành riêng cho lược đồ cho các URL http." http://www.w3.org/Prot Protocol / rfc2616 / rfc2616.html
http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
Vì vậy, có, bất cứ điều gì là hợp lệ sau một dấu hỏi. Máy chủ của bạn có thể diễn giải khác nhau, nhưng theo giai thoại , bạn có thể thấy một số ngôn ngữ coi đó là giá trị boolean, điều này đúng nếu được liệt kê.
Phần có liên quan duy nhất của thông số URI là để biết mọi thứ giữa đầu tiên ?
và đầu tiên #
phù hợp với định nghĩa của truy vấn. Nó có thể bao gồm bất kỳ nhân vật như [:/.?]
. Điều này có nghĩa là một chuỗi truy vấn như ?bar
, hoặc ?ten+green+apples
hợp lệ.
Tìm RFC 3986 tại đây
isindex
không có nghĩa là HTML5.
Nó được cung cấp không dùng nữa để chỉ sử dụng làm thành phần đầu tiên trong một biểu mẫu và gửi mà không có tên.
Nếu tên của mục nhập là "isindex", loại của nó là "văn bản" và đây là mục nhập đầu tiên trong tập dữ liệu biểu mẫu, sau đó nối giá trị vào kết quả và bỏ qua phần còn lại của mục phụ cho mục này, chuyển sang mục tiếp theo mục, nếu có, hoặc bước tiếp theo trong thuật toán tổng thể khác.
Cờ isindex chỉ dành cho sử dụng cũ. Các biểu mẫu trong việc tuân thủ các tài liệu HTML sẽ không tạo ra các tải trọng cần được giải mã với bộ cờ này.
Lần cuối isindex được hỗ trợ là HTML3 . Việc sử dụng trong HTML5 là để cung cấp khả năng tương thích ngược dễ dàng hơn.
Hỗ trợ trong các thư viện cho định dạng URI này khác nhau tuy nhiên một số thư viện cung cấp hỗ trợ cũ để dễ sử dụng isindex
.
Một số thư viện như URI của Perl cung cấp các phương pháp phân tích cú pháp các loại cấu trúc này
$uri->query_keywords
$uri->query_keywords( $keywords, ... )
$uri->query_keywords( \@keywords )
Sets and returns query components that use the keywords separated by "+" format.
url
(không hỗ trợ đặc biệt)Như một ví dụ khác thường xuyên hơn, node.js
đi theo lộ trình bình thường và giảm bớt phân tích cú pháp
parseQueryString
)Hầu hết các API phân tích cú pháp URI khác theo sau một cái gì đó tương tự như thế này.
parse_url
, theo sau là triển khai tương tự nhưng chỉ trả về chuỗi cho truy vấn. Phân tích cú pháp thành một đối tượng k=>v
yêu cầuparse_string()
Nó là hợp lệ: xem Wikipedia , RFC 1738 (3.3. HTTP) , RFC 3986 (3. Thành phần cú pháp) .
isindex
ma thuật không dùng nữa name
từ HTML5
Tính năng không dùng nữa này cho phép gửi biểu mẫu để tạo một URL như vậy, cung cấp thêm bằng chứng rằng nó hợp lệ đối với HTML. Ví dụ:
<form action="#isindex" class="border" id="isindex" method="get">
<input type="text" name="isindex" value="bar"/>
<button type="submit">Submit</button>
</form>
tạo một URL loại:
?bar
Tiêu chuẩn: https://www.w3.org/TR/html5/forms.html#naming-form-controls:-the-name-attribution
isindex
tuy nhiên không được chấp nhận như đã đề cập tại: https://stackoverflow.com/a/41689431/895245
Như tất cả các câu trả lời khác được mô tả, nó hoàn toàn hợp lệ để kiểm tra, đặc biệt đối với các công cụ loại boolean
Đây là một hàm đơn giản để lấy chuỗi truy vấn theo tên:
function getParameterByName(name, url) {
if (!url) {
url = window.location.href;
}
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
và bây giờ bạn muốn kiểm tra xem chuỗi truy vấn bạn đang tìm kiếm có tồn tại hay không, bạn có thể thực hiện một việc đơn giản như:
var exampleQueryString = (getParameterByName('exampleQueryString') != null);
những exampleQueryString
sẽ là false
nếu chức năng không thể tìm thấy chuỗi truy vấn, nếu không sẽ true
.