Tôi đã kiểm tra nó bằng cách yêu cầu trang web của tôi (apache) với tất cả các ký tự có sẵn trên bàn phím tiếng Đức của tôi dưới dạng tham số URL:
http://example.com/?^1234567890ß´qwertzuiopü+asdfghjklöä#<yxcvbnm,.-°!"§$%&/()=? `QWERTZUIOPÜ*ASDFGHJKLÖÄ\'>YXCVBNM;:_²³{[]}\|µ@€~
Chúng không được mã hóa:
^0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.-!/()=?`*;:_{}[]\|~
Không được mã hóa sau urlencode()
:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_
Không được mã hóa sau rawurlencode()
:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~
Lưu ý: Trước khi rawurlencode()
mã hóa PHP 5.3.0 ~
vì RFC 1738 . Nhưng điều này đã được thay thế bởi RFC 3986 vì vậy nó an toàn để sử dụng ngay bây giờ. Nhưng tôi không hiểu tại sao ví dụ {}
được mã hóa thông qua rawurlencode()
vì chúng không được đề cập trong RFC 3986.
Một thử nghiệm bổ sung tôi đã thực hiện liên quan đến tự động liên kết trong các văn bản thư. Tôi đã kiểm tra Mozilla Thunderbird, aol.com, triển vọng.com, gmail.com, gmx.de và yahoo.de và họ đã liên kết đầy đủ các URL có chứa các ký tự này:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~+#,%&=*;:@
Tất nhiên, ?
cũng được liên kết, nhưng chỉ khi nó được sử dụng một lần.
Một số người bây giờ sẽ đề nghị chỉ sử dụng rawurlencode()
ký tự, nhưng bạn đã bao giờ nghe nói rằng ai đó có vấn đề khi mở các trang web này chưa?
Dấu hoa thị
http://wayback.archive.org/web/*/http://google.com
Đại tá https://en.wikipedia.org/wiki/Wikipedia: About
Cộng với
https://plus.google.com/+google
Tại dấu hiệu, dấu hai chấm, dấu phẩy và dấu chấm than
https: //www.google.com/maps/place/USA/@36.2218457, ...
Do đó, các ký tự này có thể được sử dụng không bị mã hóa mà không gặp vấn đề gì. Tất nhiên bạn không nên sử dụng &;
vì trình tự mã hóa như thế nào &
. Lý do tương tự là hợp lệ %
vì nó được sử dụng để mã hóa ký tự nói chung. Và =
vì nó gán một giá trị cho một tên tham số.
Cuối cùng tôi sẽ nói nó ổn khi sử dụng những thứ chưa được mã hóa này:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~!+,*:@
Nhưng nếu bạn mong đợi các URL được tạo ngẫu nhiên, bạn không nên sử dụng .!
, vì những URL đó đánh dấu kết thúc câu và một số ứng dụng thư sẽ không tự động liên kết char cuối cùng của url. Thí dụ:
Visit http://example.com/foo=bar! !
!*'();:@&=+$,/?#[]
hoặc không được bảo vệA-Za-z0-9_.~-
(hoặc ký tự phần trăm%
là một phần của mã hóa phần trăm)