2011-01-10 14 views
5

Meine gültig Urls wie dieses .pdf könnteWas regex würde herausfinden, ob Datei-URL bestimmte Erweiterung hat

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 

wo die Dateierweiterung mehr oder weniger aussehen könnte, oder eine andere Erweiterung wie .jpg oder .psd oder gar nichts.

ich die URL ohne den someurl.com Abschnitt gespeichert, so dass es der some/path/file.pdf Teil der URL ist

Wie kann ich Regex verwenden, um die Dateierweiterung zu wissen, ob es vorhanden ist? Ist Regex das richtige Werkzeug dafür?

+1

Technisch URLs (Uniform ** Ressource ** Locators) nicht über [ "Erweiterungen"] (http://stackoverflow.com/ Fragen/3631153/how-come-einige-Site-URLs-do-not-include-a-Datei-Erweiterung), weil sie keine Dateien sind oder nicht unbedingt. Um den Ressourcen-/Medientyp herauszufinden, wäre ein 'get_headers()' korrekter. Aber OTOH natürlich, es funktioniert die meiste Zeit .. – mario

Antwort

10

Ich würde parse_url() und pathinfo() verwenden. Dies sind die korrektesten Funktionen für den Job.

$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.

Sie könnte Regex verwenden, aber es wird schwieriger zu folgen.

+2

+1 für die Verwendung von 'pathinfo' – Jonah

+0

PATHINFO_EXTENSION funktioniert super. Danke für diese Lösung. – park

1

Sie müssten wahrscheinlich eine HTTP HEAD Anfrage machen. Regex würde mit Sicherheit funktionieren, aber es ist nicht garantiert, dass alle Fälle erfasst werden.

Zum Beispiel:

http://someurl.com/some/path/file eine möglicherweise eine Textdatei ohne Erweiterung sein (wie bei den meisten * nix-Systemen) und die Regex scheitern würde die Dateierweiterung zur Verfügung zu stellen.

1

Eine viel bessere Option ist die PHP parse_url Funktion:

$path = parse_url($url, PHP_URL_PATH); 
$extension = ($pos = strrpos($path, '.')) ? substr($path, $pos) : ""; 
Verwandte Themen