У меня шаблон формы хранится в текстовом виде, места для постановки значений обозначаются маркерами типа %foo%.
Перед отрисовкой формы, я загоняю все данные в массив, так чтобы индексы совпадали с именами маркеров. Потом скармливаю это дело функции Foo( A, B, C)
Где, А - собственно массив переменных
B - массив индексов, которые не надо htmlspecialchars
С - массив ошибок, которые выдал фильтр валидации данных, этот массив я просто в виде списка вывожу после формы, хотя можно и прикрутить вывод рядом с некорректно заполненными полями.
Для отображения селектов передаю в %foo% дефолтное значение, а в %foo_select% - массив опций селекта.
ну и в подобном роде для чекбоксов и т.д.
Жуткий велосипед, но меня пока устраивает вполне
