2011-08-09 26 views

Trả lời

44

Có, có! Sử dụng filter_var:

if (filter_var($url, FILTER_VALIDATE_URL) !== false) ... 

FILTER_VALIDATE_URL xác nhận URL theo RFC 2396.

+15

FILTER_VALIDATE_URL không đáng tin cậy và không thể xác thực URL dựa trên địa chỉ IPv6 . Tôi tình cờ gặp vấn đề này trong khi tìm kiếm SO cho bất kỳ câu hỏi nào về xác thực URL PHP mà không sử dụng nó, bởi vì tôi thấy nó khá là vô ích. – GordonM

+3

điều này được hiểu là url hợp lệ, hiển thị đúng cookie: 'echo filter_var ('http://example.com/"> Cảnh báo ', FILTER_VALIDATE_URL); 'Hãy cẩn thận với' filter_var() ; 'trong 5.4 –

+0

Về nhận xét của GordonM, hãy xem xét ý chính sau đây, để biết ví dụ về cách FILTER_VALIDATE_URL của PHP có thể không hoạt động như thế nào bạn có thể mong đợi nó: https://gist.github.com/anonymous/10967187 – coatesap

0

Tùy thuộc vào định nghĩa hợp lệ của bạn. Có giá trị về mặt ngữ nghĩa, giải quyết tên miền, v.v.

Cách tiếp cận nhanh chóng là sử dụng preg_match để kiểm tra url dựa trên cụm từ thông dụng phù hợp để xác thực định dạng đúng. Dường như có một số ví dụ hay về chủ đề này PHP validation/regex for URL

+0

Với "hợp lệ", ý tôi là, nếu nó có http: // và kết thúc bằng .EXT –

+4

@Oliver: Lưu ý URL cho câu hỏi này. Đó không phải là URL hợp lệ theo định nghĩa của bạn. –

+1

Sau đó, một preg_match chống lại một biểu thức chính quy tốt hoặc filter_var http://www.php.net/manual/en/filter.filters.validate.php là đặt cược tốt nhất của bạn. Nếu bạn đi tuyến đường regex, hãy đảm bảo bạn có được đường dẫn tốt bao gồm tất cả các trường hợp sử dụng hợp lệ (http: // https: // FQDN hoặc không v.v.) –

12

Vâng, nếu chúng ta nhìn vào RFC 3986 chúng ta có thể tìm thấy định nghĩa của một URL.

Và nếu chúng ta có một cái nhìn tại Phụ lục B có một hướng dẫn để sử dụng biểu thức thông thường để phân tích một URL:

Phụ lục B. Phân tích một tham chiếu URI với Regular Expression

Là " -thắng đầu tiên trận đấu" thuật toán là giống với 'tham lam'
phương pháp định hướng sử dụng bởi POSIX biểu thức thông thường, nó là
tự nhiên và phổ biến để sử dụng một biểu thức chính quy cho phân tích cú pháp
tiềm năng năm thành tố của một ref URI erence.

Dòng sau là biểu thức chính quy để chia nhỏ một tham chiếu URI
được tạo thành tốt thành các thành phần của nó.

^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? 
    12   3 4   5  6 7  8 9 

Các số trong dòng thứ hai ở trên chỉ hỗ trợ khả năng đọc; chúng biểu thị các điểm tham chiếu cho mỗi biểu thức phụ (nghĩa là mỗi dấu ngoặc đơn được ghép nối). Chúng tôi đề cập đến giá trị phù hợp cho biểu thức con dưới dạng $. Ví dụ, phù hợp với biểu thức trên để

http://www.ics.uci.edu/pub/ietf/uri/#Related 

kết quả trong các trận đấu subexpression sau:

$1 = http: 
    $2 = http 
    $3 = //www.ics.uci.edu 
    $4 = www.ics.uci.edu 
    $5 = /pub/ietf/uri/ 
    $6 = <undefined> 
    $7 = <undefined> 
    $8 = #Related 
    $9 = Related 

nơi chỉ ra rằng thành phần này là không có mặt, như là trường hợp cho thành phần truy vấn trong ví dụ trên. Do đó, chúng ta có thể xác định giá trị của năm thành phần như

scheme = $2 
    authority = $4 
    path  = $5 
    query  = $7 
    fragment = $9 

Đi theo hướng ngược lại, chúng ta có thể tái tạo một tham chiếu URI từ các thành phần của nó bằng cách sử dụng các thuật toán của Mục 5.3.

Bạn có thể UE biểu thức chính quy này để phân tích các URL bằng tay hoặc sử dụng được xây dựng trong parse_url function avalable trong PHP 4 và 5