2015-04-24 2 views
1

У меня есть следующий код для показа эскиза изображения, миниатюра создается с _small, помещенным в конец имени файла. Его простая функция замены:избегайте чувствительности к регистру PHP при замене функции

<?php 
if ($row_rsAdminMenu['image1']) { 
    $src = $row_rsAdminMenu['image1']; 
    $src = str_replace('.JPG', '_small.JPG', $src); 
} else { 
    $src = '../../images/NoPic.jpg'; 
} 
echo '<img src="' . htmlspecialchars($src, ENT_COMPAT, 'UTF-8') . '" />'; ?> 

ответ

1

Это было не очень понятно, в этом вопросе, но я думаю, что вы хотите быть в состоянии для изменения имени файла следующим образом:

image.JPG -> image_small.JPG 
image.jpg -> image_small.jpg 

Это может быть сделано с помощью preg_replace() с использованием обратных ссылок, например:

php > echo preg_replace('/(^.*)(\.jpg)$/i', '\1_small\2', 'image.jpg'); 
image_small.jpg 
php > echo preg_replace('/(^.*)(\.jpg)$/i', '\1_small\2', 'image.JPG'); 
image_small.JPG 
php > echo preg_replace('/(^.*)(\.jpg)$/i', '\1_small\2', 'image.jPg'); 
image_small.jPg 

Это работает, вставив "_small" между 2 соответствующих групп.

В контексте вашего кода:

<?php 
if ($row_rsAdminMenu['image1']) { 
    $src = $row_rsAdminMenu['image1']; 
    $src = preg_replace('/(^.*)(\.jpg)$/i', '\1_small\2', $src); 
} else { 
    $src = '../../images/NoPic.jpg'; 
} 
echo '<img src="' . htmlspecialchars($src, ENT_COMPAT, 'UTF-8') . '" />'; ?> 

С незначительной модификацией он может также работать для других расширений файлов, при желании:

php > echo preg_replace('/(^.*)(\.(jpg|gif|png|jpeg))$/i', '\1_small\2', 'image.PNG'); 
image_small.PNG 
+0

Прошу прощения, потому что оригинальный вопрос был неясным, поток стека застыл, когда я отправил оригинальный вопрос, я обновился, но он пропустил оставшуюся часть вопроса. Спасибо за помощь, как шарм, блестящий –

1

Вы можете использовать str_ireplace для случая нечувствительный заменить.

$src = str_ireplace('.JPG', '_small.JPG', $src); 
+0

Это работает, но если исходное изображение было .jpg он создает миниатюру с _small.jpg, поэтому выше не удается, потому что PHP чувствителен к регистру на _small.JPG. Это способ показать миниатюру ли ее _small.JPG или _small_.jpg? –

0

Try с -

echo preg_replace('/.jpg/i', '', '_small.JPG'); 

Или, если хотите удалить несколько расширений -

echo preg_replace('/.(jpg|gif|png)/i', '', '_small.JPG _small.GIF'); 
Смежные вопросы