fork download
  1. <?php
  2. function render_template($template, $variables) {
  3. $replacements = array();
  4.  
  5. // Обрабатываем список переменных.
  6. foreach ($variables as $key => $value) {
  7.  
  8. if (strncmp($key, "html_", 5) != 0) {
  9. // Экранируем спецсимволы, если имя переменной НЕ начинается с html_ (т.е., если мы вставляем не HTML-код).
  10. $value = htmlspecialchars($value, ENT_COMPAT, "UTF-8");
  11. }
  12.  
  13. // Декорируем имя и добавляем в список замен.
  14. $replacements['%' . $key . '%'] = $value;
  15. }
  16.  
  17. // Заменяем все.
  18. return str_replace(array_keys($replacements), array_values($replacements), $template);
  19. }
  20.  
  21. // Некие данные (например, из базы).
  22. $test_variables = array(
  23. 'user' => '<<<<<Kolyan>>>>>',
  24. 'message' => 'привет',
  25. 'html_announcement' => 'это <u>HTML</u>, который не будет экранирован'
  26. );
  27.  
  28. // Некий шаблон (например, из файла).
  29. $test_template = <<< 'TEMPLATE_END'
  30. <div id="announcement">%html_announcement%</div>
  31. <div class="record">
  32. <div class="user">%user%</div>
  33. <div class="message">%message%</div>
  34. </div>
  35. TEMPLATE_END;
  36.  
  37. // Нас не интересуют детали HTML, мы поручаем все шаблонизатору.
  38. echo render_template($test_template, $test_variables);
  39. ?>
  40.  
Success #stdin #stdout 0.01s 20568KB
stdin
Standard input is empty
stdout
<div id="announcement">это <u>HTML</u>, который не будет экранирован</div>
<div class="record">
    <div class="user">&lt;&lt;&lt;&lt;&lt;Kolyan&gt;&gt;&gt;&gt;&gt;</div>
    <div class="message">привет</div>
</div>