2009-07-15 25 views
9

Tôi đang viết một số mã xử lý URL và tôi muốn đảm bảo rằng tôi không để lại một số trường hợp lạ ...Các ký tự hợp lệ có thể hiển thị trong máy chủ lưu trữ URL là gì?

Có bất kỳ ký tự hợp lệ nào cho một máy chủ không phải là: AZ, 0-9 , "-" và "."?

(Điều này bao gồm bất cứ điều gì có thể trong tên miền phụ, vv esentially, bất cứ điều gì giữa: // và là người đầu tiên /)

Cảm ơn!

+0

Vì bạn đang tìm kiếm "bất kỳ thứ gì giữa: // và đầu tiên /", đừng quên rằng bạn có thể có số cổng trong đó, như trong http: s: mymy.host.com : 8080/... – fredw

Trả lời

24

Xin xem Restrictions on valid host names:

Hostname được cấu tạo của hàng loạt các nhãn được nối với các chấm, giống như tất cả các tên miền . Ví dụ: "en.wikipedia.org" là tên máy chủ. Mỗi nhãn phải dài từ 1 đến 63 ký tự và toàn bộ tên máy chủ có tối đa 255 ký tự.

RFC nhiệm vụ mà nhãn của một hostname có thể chứa chỉ các chữ cái ASCII 'a' qua 'z' (case-insensitive), các chữ số '0' đến '9', và gạch nối. Nhãn tên máy chủ không thể bắt đầu hoặc kết thúc bằng dấu gạch nối. Không cho phép các ký hiệu khác , ký tự dấu chấm câu hoặc khoảng trắng.

+0

'en.wikipedia.org' là tên miền đủ điều kiện. Nó bao gồm tên máy chủ 'vi' và tên miền 'wikipedia.org'. –

3

Phụ thuộc vào mức độ bạn thực hiện xác thực (trước hoặc sau khi thoát URL). Nếu bạn cố gắng xác nhận tính hợp lệ của người dùng, thì nó có thể vượt xa ASCII (với khối lớn Unicode).

Xem http://en.wikipedia.org/wiki/Internationalized_domain_name

Nếu bạn cố gắng để xác nhận sau khi tất cả các thoát và "punycode" được thực hiện, không có điểm trong xác nhận, vì đó đã được đảm bảo để chỉ chứa các ký tự hợp lệ bởi RFC cũ.

+0

Hmmmmm, điểm tốt, tôi cần phải xem xét điều này để xem liệu nó có áp dụng cho tôi hay không. Tôi không chắc chắn những gì bạn có nghĩa là trước hoặc sau khi thoát, và tôi không chính xác chắc chắn làm thế nào nó áp dụng cho tình hình cụ thể của tôi (đó là một chút lạ). Tôi sẽ phải thử nghiệm với điều này, cảm ơn bạn! –

+0

Ý của tôi là "trước hoặc sau khi thoát" "trước khi thoát": những thứ mà người dùng nhập. Trong đó người ta có thể sử dụng những thứ mà "sau khi thoát" url không thể sử dụng (ví dụ =/&?) "sau khi thoát": url được sử dụng bởi cấp thấp dns/http/bất cứ điều gì (% 3D% 2F% 26% 3F). Rằng "thoát" phức tạp hơn "chỉ thay thế các ký tự không hợp lệ bằng% xx" cho ký tự quốc tế –

1

Hãy nhớ rằng ngoài các quy tắc tên máy chủ của Internet, hệ thống DNS được tự do tạo bất kỳ tên nào mà chúng thích. Các máy chủ DNS có thể chấp nhận và trả lời các yêu cầu nhị phân 8 bit: giao thức dây DNS không cấm nó.

Điều này có nghĩa là đối với các URL LAN nội bộ, bạn có thể có các quy tắc khác nhau, chẳng hạn như dấu gạch dưới xuất hiện trong tên máy chủ.

0

Nếu bạn muốn viết mã phân tích URL khớp hoàn toàn với thông số W3C chính thức, hãy xem tài liệu tại www.w3.org/TR/url-1/. Xem phần 3 (Máy chủ) để biết thông tin cụ thể về máy chủ trong URL.

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