<?php ## Пример скрипта, использующего префильтр кода для шаблонов.
show_source(__FILE__); echo "<hr>";

require_once 
"../../lib/config.php";
require_once 
"PHP/CodeFilter.php";

// Если нужно, подключаем Debug_BacktraceDumper для
// улучшенного вывода отладочных сообщений PHP.
if (true) {
    require_once 
"Debug/BacktraceDumper.php";
    
Debug_BacktraceDumper::set_error_handler();
}

// Некоторая переменная с HTML-разметкой.
$test "<b>test</b>";

// Создаем объект-фильтр и настраиваем его параметры.
$filter = new PHP_CodeFilter();
$filter->addFilter('filter_phpOutputOperator');

// Запускаем включаемый файл (аналог include), но его 
// код перед выполнением обрабатывается префильтром.
$filter->includeFile('template.php');

// string filter_phpOutputOperator(string $code)
// Префильтр кода: заменяет операторы '< ?= ... ? >' 
// (без пробелов, конечно) на '< ?=htmlspecialchars(...)? >',
// что обеспечивает автоматический квотинг HTML в шаблонах
// и повышает безопасность скриптов.
function filter_phpOutputOperator($code)
{
    return 
preg_replace(
        
'/(<\?=) (.*?) (?: \s*;)* \s* (\? >)/sx'
        
'$1htmlspecialchars($2, ENT_QUOTES)$3'
        
$code
    
);
}
?>

Проверка htmlspecialchars-квотинга вывода:
(Должна быть выведена HTML-разметка, как после htmlspecialchars().)
<b>test</b>

Проверка использования неопределенной переменной:
(Должна быть ссылка на /var/www/dklab.ru/lib/PHP_CodeFilter/demo/test/PHP_CodeFilter/template.php.)
includeFile('template2.php')?>

Проверка вызова несуществующей функции (фатальная ошибка):
(Должна быть ссылка на /var/www/dklab.ru/lib/PHP_CodeFilter/demo/test/PHP_CodeFilter/template.php!)