Trong PHP, filter_var('www.example.com', FILTER_VALIDATE_URL)
trả lại false
. Điều này có đúng không? Không phải là www.example.com
URL hợp lệ hoặc giao thức (http: //, ftp: //, v.v.) có cần phải được nêu rõ trong URL để chính xác không?FILTER_VALIDATE_URL có quá nghiêm ngặt không?
Trả lời
Đây không phải là URL hợp lệ. Những điều tiền tố với http://
không bao giờ là một điều rất thân thiện với người dùng, vì vậy các trình duyệt hiện đại cho rằng bạn có nghĩa là http nếu bạn chỉ cần nhập tên miền. Thư viện phần mềm, đúng, một chút cầu kỳ hơn!
Một cách tiếp cận bạn có thể thực hiện là chuyển chuỗi qua parse_url và sau đó thêm bất kỳ thành phần nào bị thiếu, ví dụ:
if ($parts = parse_url($url)) {
if (!isset($parts["scheme"]))
{
$url = "http://$url";
}
}
Điều thú vị là, khi bạn sử dụng FILTER_VALIDATE_URL, nó thực sự sử dụng parse_url trong nội bộ để tìm ra những gì chương trình này là (view source). Nhờ có salathe cho đốm này trong các ý kiến dưới đây.
URL phải tương ứng với các quy tắc được đặt trước trong RFC 2396 và theo thông số đó, giao thức là cần thiết.
Phần lược đồ ("giao thức") là bắt buộc đối với FILTER_VALIDATE_URL
.
Ngoài câu trả lời của Paul Dixon tôi muốn nói rằng bạn có thể sử dụng flags cho FILTER_VALIDATE_URL
để chỉ định phần nào của URL phải được trình bày.
FILTER_FLAG_SCHEME_REQUIRED
FILTER_FLAG_HOST_REQUIRED
FILTER_FLAG_PATH_REQUIRED
FILTER_FLAG_QUERY_REQUIRED
Kể từ PHP 5.2.1 FILTER_FLAG_SCHEME_REQUIRED
và FILTER_FLAG_HOST_REQUIRED
cờ được sử dụng bởi mặc định và, thật không may, không có cách nào để vô hiệu hóa chúng (bạn không thể làm điều gì đó như filter_var($url, FILTER_VALIDATE_URL, ~FILTER_FLAG_SCHEME_REQUIRED);
nếu sự tồn tại của phần thức truy cập URL không không cần thiết). Nó có vẻ như là một lỗi cho tôi. Có một thân nhân bugreport.
Tôi ước điều này có hiệu quả, nhưng tôi thực sự không thể làm được. –
Điều này dường như làm cho nó không xác nhận bất kỳ url. https://3v4l.org/1TjA5 – Derokorian
@RussellSilva, Derokorian Bạn nói đúng, tôi không thể làm cho nó hoạt động. Nó trông giống như một lỗi cho tôi. Tôi đã cập nhật câu trả lời của mình. –
- 1. Các mảng Haskell quá nghiêm ngặt?
- 2. Nghiêm ngặt hoặc Chuyển tiếp?
- 3. HTML5 DOCTYPE với nghiêm ngặt
- 4. C++ liên kết - nghiêm ngặt và yếu
- 5. xHTML 1.0 nghiêm ngặt - Xác thực iFrames
- 6. MonadFix bằng ngôn ngữ nghiêm ngặt
- 7. Tắt chế độ nghiêm ngặt của MySQL
- 8. HTML Tăng nghiêm ngặt chiều cao dòng
- 9. Haskell: Các hoạt động boolean không nghiêm ngặt
- 10. Chúng ta có cần đặt "sử dụng nghiêm ngặt" trong các tệp js bên ngoài nếu tệp html của chúng tôi đã "sử dụng nghiêm ngặt" không?
- 11. Có cách nào để kiểm tra xem chế độ nghiêm ngặt có được thực thi không?
- 12. Định nghĩa nghiêm ngặt để đọc/ghi tệp CSV
- 13. Có cách nào để làm cho simplejson kém nghiêm ngặt hơn không?
- 14. Có quy tắc nghiêm ngặt nào để chuyển đổi JSON sang XML và ngược lại không?
- 15. Các vectơ có nghiêm ngặt hơn khi kiểm tra các giới hạn ngoài mảng đống không?
- 16. Ruby có tương đương với việc sử dụng Perl nghiêm ngặt không?
- 17. Có cần một trình biên dịch Python "sử dụng nghiêm ngặt" không?
- 18. Có phải C89 hoặc C++ 03 định nghĩa các quy tắc bí danh nghiêm ngặt không?
- 19. Cách nhận người gọi từ chế độ nghiêm ngặt?
- 20. cảnh báo aliasling nghiêm ngặt về gcc 4.6.1 lỗi
- 21. Tiêu chuẩn nghiêm ngặt: lỗi mysqli_next_result() với mysqli_multi_query
- 22. Bật cảnh báo bí danh nghiêm ngặt trong g + +
- 23. Máy nén YUI và gợi ý "sử dụng nghiêm ngặt"
- 24. Trong ECMAScript5, phạm vi "sử dụng nghiêm ngặt" là gì?
- 25. Thành ngữ cho typedef nghiêm ngặt trong C++
- 26. Chế độ nghiêm ngặt: Thay thế cho arguments.callee.length?
- 27. Biến toàn cầu ở chế độ nghiêm ngặt JavaScript
- 28. vi phạm chế độ nghiêm ngặt liệt kê
- 29. Thời gian 24 giờ nghiêm ngặt trong JFormattedTextField
- 30. Tùy chọn GCC cho mã C nghiêm ngặt nhất?
Cảm ơn bạn đã giải thích! Tôi sẽ sử dụng phương pháp 'parse_url' mà bạn đã nói, tôi thích nó hơn' filter_var' – federicot
Trivia thứ tư: 'FILTER_VALIDATE_URL' sử dụng' parse_url() 'để kiểm tra xem có một lược đồ hay không. – salathe
Rất tuyệt! Tôi sẽ thêm nó vào câu trả lời! –