Вы можете заменить значение на что-то вроде:
$subject = 'Testing... charset=baz; and charset=bat" :-)';
echo preg_replace('/(?<=charset=)[a-zA-Z0-9_-]+(?=[;"])/', 'utf-8', $subject);
// Testing... charset=utf-8; and charset=utf-8" :-)
Деконструировано, регулярное выражение соответствует:
- Точка, следующая сразу за
charset=
(с использованием lookbehind )
- Последовательность из одного или нескольких буквенно-цифровых символов, символов подчеркивания или дефиса (подлежит замене)
- Если за ним следует точка с запятой или двойная кавычка