используйте stristr для извлечения иглы из стога сена, без учета регистра
$keyword_caseRetained_all = stristr($excerpt, $keyword);
но это возвращает иглу и остальную часть стога сена, так что вы должны использовать substr, чтобы сохранить только часть иглы. начать с позиции 0, набери длину ключевого слова
$keyword_caseRetained = substr($keyword_caseRetained_all, 0, strlen($keyword) );
теперь используйте эту переменную внутри функции str_ireplace
$excerpt = str_ireplace($keyword, '<em>'.$keyword_caseRetained.'</em>', $excerpt);
как только вы это узнаете, вы можете объединить строки 1 и 2 в хорошем крысином гнезде, чтобы сократить ваш код.
или добавьте это как метод к классу манипулирования строками.