Передача данных без экранирования

Иногда возникает необходимость передать данные в точности «как есть», отказавшись от автоматического экранирования.
Несмотря на то, что неосторожное использование этой техники повышает уязвимость вашего приложения, существует целый спектр задач, выполнение которых другими способами затруднено.

Специально для этой цели существует особый класс - jqGrid_Data_Raw.
По сути - он является простой оберткой для текста. Благодаря наличию «волшебного метода» __toString, его можно использовать как строку в большинстве случаев.

Встретившись с объектом этого класса, функции jqGridPHP понимают, что текст внутри объекта должен быть оставлен «как есть».

Подход с объектом хорош тем, что объект может быть только явно создан разработчиком. Он не может быть «случайно» получен из внешних источников, если разработчик об этом специально не позаботился.

Использование

Передача данных без экранирования часто требуется в colModel для добавления javascript функций.

$this->cols = array(
    ...
    'date'      => array('label' => 'test',
                         'width' => 15,
                         'editable' => true,
                         'editoptions' => array('defaultValue' => date('d.m.Y'),
                                                'dataInit'     => new jqGrid_Data_Raw('function(el){ $(el).datepicker(); }'),
                  ),
    ...
);

Отсутствие экранирования может пригодится при использовании «оберток» для SQL-запросов.

$ins = array(
    'name'        => 'Jane',
    'discount'    => 0.1,
    'date_create' => new jqGrid_Data_Raw('now()'), //database function call!
);
 
$this->dbInsert('tbl_customer', $ins);
INSERT INTO tbl_customer (name, discount, date_create) VALUES ('Jane', '0.1', now());

На других языках