Ваше текущее регулярное выражение говорит: замените последний символ $filename
пустой строкой, если этот последний символ является символом вопросительного знака.
Здесь фиксированное регулярное выражение, которое работает для вашего конкретного примера: /\?maxwidth=.*$/
Есть много других выражений, которые могли бы сделать работу в различных условиях. Однако, возможно, было бы лучше использовать функцию PHP parse_url(), чтобы разделить URL-адрес на различные его части, а затем просто отбросить части, которые вам не нужны, и объединить их обратно в строку. Например:
$filename = 'http://thebox.vn/Uploaded/catmy/2013_04_23/couple_t2.jpg?maxwidth=480';
// Parse the filename into parts.
$filename_parsed = parse_url($filename);
// Merge the parsed filename back into a string,
// discarding any irrelevant parts.
$filename_merged = $filename_parsed[ 'scheme' ] . '://' . $filename_parsed[ 'host' ] . $filename_parsed[ 'path' ];
// Prints: http://thebox.vn/Uploaded/catmy/2013_04_23/couple_t2.jpg
echo $filename_merged;
Как насчет использования парсера URL? http://stackoverflow.com/q/12687790/139010 –