2011-01-10 35 views
5

url hợp lệ của tôi có thể nhìn nhiều hơn hoặc ít hơn như thế nàyregex Điều gì sẽ tìm hiểu xem tập tin có phần mở rộng url nhất định

http://someurl.com/some/path/file.pdf 
or 
http://someurl.com/some/path/file.pdf?param=value 
or 
http://someurl.com/some/path/file.pdf?param=value&second=val 

nơi phần mở rộng tập tin có thể là .pdf, hoặc một số phần mở rộng khác như .jpg hoặc .psd hoặc không có gì cả.

Tôi có url lưu trữ mà không cần phần someurl.com, vì vậy nó là một phần của some/path/file.pdf url

Làm thế nào tôi có thể sử dụng regex để biết phần mở rộng tập tin nếu nó hiện diện? Regex là công cụ thích hợp cho việc này?

+1

Về mặt kỹ thuật URL (Uniform Resource ** ** Locators) không có [ "mở rộng"] (http://stackoverflow.com/ câu hỏi/3631153/how-come-some-site-url-do-không-bao gồm-a-tệp-phần mở rộng) bởi vì chúng không phải là tệp, hoặc không nhất thiết. Để tìm ra loại tài nguyên/phương tiện, một 'get_headers()' sẽ chính xác hơn. Nhưng OTOH tất nhiên, nó hoạt động phần lớn thời gian .. – mario

Trả lời

10

Tôi sẽ sử dụng parse_url()pathinfo(). Đây là những chức năng chính xác nhất cho công việc.

$url = 'http://someurl.com/some/path/file.pdf?param=value'; 

$path = parse_url($url, PHP_URL_PATH); 

$ext = pathinfo($path, PATHINFO_EXTENSION); 

var_dump($ext); // string(3) "pdf" 

See is on CodePad.org.

Bạn có thể sử dụng regex, nhưng sẽ khó theo dõi hơn.

+2

+1 để sử dụng 'pathinfo' – Jonah

+0

PATHINFO_EXTENSION hoạt động tốt. Cảm ơn vì giải pháp này. – park

1

Có thể bạn sẽ cần thực hiện yêu cầu HEAD HTTP. Regex sẽ làm việc chắc chắn, nhưng bạn không được bảo đảm để bắt tất cả các trường hợp.

Ví dụ:

http://someurl.com/some/path/file có thể một là một tập tin văn bản mà không mở rộng (như trên hầu hết các hệ thống * nix) và regex sẽ thất bại trong việc cung cấp phần mở rộng tập tin.

1

Một lựa chọn tốt hơn nhiều là parse_url chức năng của PHP:

$path = parse_url($url, PHP_URL_PATH); 
$extension = ($pos = strrpos($path, '.')) ? substr($path, $pos) : ""; 
Các vấn đề liên quan