данный может располагаться в куске информации, в котором мы не можем заменять @ вне данного
Честно,- не понял. Пример строки покажите.
Чтобы "< span>" не пропадал,- либо вопрос правьте, либо там где вам ответ пишут, выберите "..." -> "HTML" вставьте в теги ваш код и скопируйте содержимое textarea в комментарий.
kpa6uu: Заменить %s на что-то другое - тоже str_replace(). Если вам нужен аналог *printf - используйте соответствующую функцию *printf. Четкого правила что на что менять вы не сформулировали, следовательно задача нерешаема.
Владимир Мартьянов: привёл плохой пример. Смотрите, у нас есть кусок информации, в котором идёт HTML с span вставками %. Мы не можем заменить % по всему куску информации. Мы должны их заменить сугубо в указанных span вставках.