Не хочет переводить в верхний регистр

L
На сайте с 22.11.2013
Offline
92
202

Привет

что то я совсем намучился

есть код


$artist = 'Vanessa Da Mata/felguk/cat Dealers';
$artist = preg_replace('#/(.{1})#ui', ' & '.mb_strtoupper('\\1', 'utf-8'), $artist);
echo $artist;

должно вывести

Vanessa Da Mata & Felguk & Cat Dealer

а выводит

Vanessa Da Mata & felguk & cat Dealer

IL
На сайте с 20.04.2007
Offline
412
#1
lutskboy:
должно вывести

Почему?

mb_strtoupper выполнится над строкой '\\1'.. (без изменений), "сцепится" с &мперсандом и итоговая строка ' & \\1' пойдёт "как есть" аргументом в preg_replace.


# для не UTF-8 пойдёт так
$artist = join(' & ', array_map('ucfirst', explode('/', $artist)));
L
На сайте с 22.11.2013
Offline
92
#2

спасибо. странно конечно что мой метод не сработал. хотя мне кажется я раньше такое применял...

S
На сайте с 30.09.2016
Offline
459
#3
lutskboy:
спасибо. странно конечно что мой метод не сработал. хотя мне кажется я раньше такое применял...

Это и не должно работать. Для замены через функцию существует preg_replace_callback().

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий