0

I would like to remove anything that follows after a specific set of characters (i.e. filetypes / extensions). I have tried numerous scripts I found online, but none really manage to do what I need, they either remove the file extension as well, or keep parts of the arguments that follow.

$urls = array(
'http://www.example.com/images/image1.jpg',
'http://www.example.com/images/image2.png?arg=value',
'http://www.example.com/images/image3.jpg?foo=bar',
'http://www.example.com/images/image4.gif?v=1',
'http://www.example.com/images/image5.bmp?x=y',
'http://www.example.com/images/image6.tiff?werdfs=234234'
);

Desired outcome:

http://www.example.com/images/image1.jpg
http://www.example.com/images/image2.png
http://www.example.com/images/image3.jpg
http://www.example.com/images/image4.gif
http://www.example.com/images/image5.bmp
http://www.example.com/images/image6.tiff
rainerbrunotte
  • 907
  • 1
  • 17
  • 37

2 Answers2

1

Maybe this one help you.


$re = '/^.*(?:\.)[a-zA-Z]+/m';
$urls = array(
'http://www.example.com/images/image1.jpg',
'http://www.example.com/images/image2.png?arg=value',
'http://www.example.com/images/image3.jpg?foo=bar',
'http://www.example.com/images/image4.gif?v=1',
'http://www.example.com/images/image5.bmp?x=y',
'http://www.example.com/images/image6.tiff?werdfs=234234',
'asdasd'
);

foreach ($urls as $url) {
    preg_match($re, $url, $matches);
    if ($matches) {
        echo $matches[0];
        echo "\n";
    }
}

Output

http://www.example.com/images/image1.jpg
http://www.example.com/images/image2.png
http://www.example.com/images/image3.jpg
http://www.example.com/images/image4.gif
http://www.example.com/images/image5.bmp
http://www.example.com/images/image6.tiff

basit raza
  • 661
  • 2
  • 6
  • 18
0

How about PHP's parse_url() and basename?

$inName = $urls[0]; // for example
$newName = parse_url($inName,PHP_URL_SCHEME)
         . parse_url($inName,PHP_URL_HOST)
         . parse_url($inName,PHP_URL_PATH)
         . basename($inName);