<?php
function render_template( $template , $variables ) {
// Обрабатываем список переменных.
foreach ( $variables as $key => $value ) {
if ( strncmp ( $key , "html_" , 5 ) != 0 ) { // Экранируем спецсимволы, если имя переменной НЕ начинается с html_ (т.е., если мы вставляем не HTML-код).
}
// Декорируем имя и добавляем в список замен.
$replacements [ '%' . $key . '%' ] = $value ;
}
// Заменяем все.
}
// Некие данные (например, из базы).
'user' => '<<<<<Kolyan>>>>>' ,
'message' => 'привет' ,
'html_announcement' => 'это <u>HTML</u>, который не будет экранирован'
) ;
// Некий шаблон (например, из файла).
$test_template = <<< 'TEMPLATE_END'
< div id= "announcement" >% html_announcement%</ div>
< div class = "record" >
< div class = "user" >% user%</ div>
< div class = "message" >% message%</ div>
</ div>
TEMPLATE_END;
// Нас не интересуют детали HTML, мы поручаем все шаблонизатору.
echo render_template( $test_template , $test_variables ) ;
?>
PD9waHAKZnVuY3Rpb24gcmVuZGVyX3RlbXBsYXRlKCR0ZW1wbGF0ZSwgJHZhcmlhYmxlcykgewogICAgJHJlcGxhY2VtZW50cyA9IGFycmF5KCk7CiAgICAKICAgIC8vINCe0LHRgNCw0LHQsNGC0YvQstCw0LXQvCDRgdC/0LjRgdC+0Log0L/QtdGA0LXQvNC10L3QvdGL0YUuCiAgICBmb3JlYWNoICgkdmFyaWFibGVzIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgCiAgICAgICAgaWYgKHN0cm5jbXAoJGtleSwgImh0bWxfIiwgNSkgIT0gMCkgewogICAgICAgICAgLy8g0K3QutGA0LDQvdC40YDRg9C10Lwg0YHQv9C10YbRgdC40LzQstC+0LvRiywg0LXRgdC70Lgg0LjQvNGPINC/0LXRgNC10LzQtdC90L3QvtC5INCd0JUg0L3QsNGH0LjQvdCw0LXRgtGB0Y8g0YEgaHRtbF8gKNGCLtC1Liwg0LXRgdC70Lgg0LzRiyDQstGB0YLQsNCy0LvRj9C10Lwg0L3QtSBIVE1MLdC60L7QtCkuCiAgICAgICAgICAkdmFsdWUgPSBodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSwgRU5UX0NPTVBBVCwgIlVURi04Iik7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vINCU0LXQutC+0YDQuNGA0YPQtdC8INC40LzRjyDQuCDQtNC+0LHQsNCy0LvRj9C10Lwg0LIg0YHQv9C40YHQvtC6INC30LDQvNC10L0uCiAgICAgICAgJHJlcGxhY2VtZW50c1snJScgLiAka2V5IC4gJyUnXSA9ICR2YWx1ZTsKICAgIH0KICAgIAogICAgLy8g0JfQsNC80LXQvdGP0LXQvCDQstGB0LUuCiAgICByZXR1cm4gc3RyX3JlcGxhY2UoYXJyYXlfa2V5cygkcmVwbGFjZW1lbnRzKSwgYXJyYXlfdmFsdWVzKCRyZXBsYWNlbWVudHMpLCAkdGVtcGxhdGUpOwp9CgovLyDQndC10LrQuNC1INC00LDQvdC90YvQtSAo0L3QsNC/0YDQuNC80LXRgCwg0LjQtyDQsdCw0LfRiykuCiR0ZXN0X3ZhcmlhYmxlcyA9IGFycmF5KAogICAgJ3VzZXInID0+ICc8PDw8PEtvbHlhbj4+Pj4+JywKICAgICdtZXNzYWdlJyA9PiAn0L/RgNC40LLQtdGCJywKICAgICdodG1sX2Fubm91bmNlbWVudCcgPT4gJ9GN0YLQviA8dT5IVE1MPC91Piwg0LrQvtGC0L7RgNGL0Lkg0L3QtSDQsdGD0LTQtdGCINGN0LrRgNCw0L3QuNGA0L7QstCw0L0nCik7CgovLyDQndC10LrQuNC5INGI0LDQsdC70L7QvSAo0L3QsNC/0YDQuNC80LXRgCwg0LjQtyDRhNCw0LnQu9CwKS4KJHRlc3RfdGVtcGxhdGUgPSA8PDwgJ1RFTVBMQVRFX0VORCcKPGRpdiBpZD0iYW5ub3VuY2VtZW50Ij4laHRtbF9hbm5vdW5jZW1lbnQlPC9kaXY+CjxkaXYgY2xhc3M9InJlY29yZCI+CiAgICA8ZGl2IGNsYXNzPSJ1c2VyIj4ldXNlciU8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Im1lc3NhZ2UiPiVtZXNzYWdlJTwvZGl2Pgo8L2Rpdj4KVEVNUExBVEVfRU5EOwoKLy8g0J3QsNGBINC90LUg0LjQvdGC0LXRgNC10YHRg9GO0YIg0LTQtdGC0LDQu9C4IEhUTUwsINC80Ysg0L/QvtGA0YPRh9Cw0LXQvCDQstGB0LUg0YjQsNCx0LvQvtC90LjQt9Cw0YLQvtGA0YMuCmVjaG8gcmVuZGVyX3RlbXBsYXRlKCR0ZXN0X3RlbXBsYXRlLCAkdGVzdF92YXJpYWJsZXMpOwo/Pgo=