Экранирование данных для использования в представлении CodeIgniter - PullRequest
1 голос
/ 30 октября 2009

У меня есть контроллер и вид; данным, с которыми я работаю внутри контроллера, нельзя доверять (они извлекаются откуда-то извне и не $_GET или $_POST).

Как мне избежать данных при печати в представлении, чтобы обеспечить правильное экранирование тегов и других вещей? Я привык к Zend_View's $this->escape($foo), который используется изнутри вида, поэтому я все еще пытаюсь понять. Я предпочитаю избегать его из представления, поскольку я использую данные, но если это не вариант, я сделаю это в контроллере.

(Я обнаружил фильтрацию для ввода $ this->, но поскольку данные не поступают из $_GET / $_POST, это не очень полезно для меня. :-) К сожалению, примеры, которые я До сих пор все использовали контроллер, помещающий статические данные в массив, который затем передается в представление, например. $data['foo'] = 'Example')

Есть идеи?

Редактировать: Я спрашиваю, потому что я не особо наслаждаюсь использованием html_entities($str, ENT_QUOTES, 'utf-8') везде (вместе с mb_convert_encoding() и друзьями), но я предполагаю, что создам пользовательский помощник при необходимости.

Редактировать # 2: Данные представляют собой набор строк (которые могут содержать что угодно, от буквенно-цифровых символов до <b>foo</b>, до <script>alert('xsslol');</script>.

Мне нужно экранировать эти строки, чтобы напечатать их, скажем, в ячейках таблицы, не позволяя печатать какие-либо теги HTML (преобразовывая теги в их эквиваленты сущности HTML).
Если бы я работал с чистым PHP, я бы использовал для этого htmlentities (), как указано выше.

1 Ответ

3 голосов
/ 30 октября 2009

Не зная природы данных, которые вы получаете и как они должны отображаться, на это сложно ответить.

Вы все еще можете использовать метод input class xss_clean где угодно, поскольку по умолчанию он инициализируется. Вы можете сделать это в контроллере перед отправкой в ​​представление или в представление:

echo $this->input->xss_clean($mystery_data);

Примечание: xss_clean не автоматически запускается для данных POST и COOKIE, если вы не установили это в файле конфигурации своего приложения:

$config['global_xss_filtering'] = TRUE;

Вы можете посмотреть на это в system / library / Input.php, это довольно подробно.

...