Преобразование верхних тегов html в нижний регистр

У меня есть следующие, чтобы заменить HTML-теги в верхнем регистре строчными.

$output = preg_replace("%<(/?[AZ].*?)>%s",strtolower('$1'),$output); 

Совпадение, похоже, хорошо работает (на моем сайте тестирования RegEx), но замены нет.

 <EM>TEST</EM> becomes EMTEST/EM 

Надеюсь, кто-то может указать мне в правильном направлении.

Вы вызываете strtolower на "$1" а затем используете результат (который снова равен $1 ) для замены на.

Вместо этого используйте preg_replace_callback и получите обратный вызов: function($m) {return strtolower($m[0]);}

 $output = preg_replace("%<(/?[AZ].*?)>%se", "'<' . strtolower('\\1') . '>'",$output); 

Edit : забыл упомянуть, что вы НЕ должны использовать preg для HTML-материала 🙂 DOMDocument – намного лучший выбор.