Как экранировать значения form_dropdown в CodeIgniter - PullRequest
0 голосов
/ 25 марта 2019

Я создал веб-приложение с CodeIgniter 3, с PHP 7.0 и MySQL 5.6.

У меня есть таблица с именем «отделы», и пользователи могут создавать строки с формой в приложении.

Результат в базе данных выглядит следующим образом:

id    1
name  accounting

В другой форме я разрешаю пользователям создавать подотдел, который зависит от одного отдела.Я позволил пользователю выбрать отдел в выпадающем меню.Название опций - это название отдела, а значение - идентификатор, в соответствии с сохраненными данными.

<select name="department">
    <option value="department_id">department_name</option>
    ...
</select>

Но я использую CodeIgniter form_helper, поэтому я получаю данные из своей базы данных,массив, содержащий строки (которые являются массивами):

echo form_drop_down('department', $departments_from_DB);

Я прочитал в DOC CI (о html_escape() функции), что form_helper должен экранировать свое содержимое:

ЕслиВы используете любую из вспомогательных функций формы, перечисленных на этой странице, значения формы будут автоматически экранированы, поэтому нет необходимости вызывать эту функцию.Используйте его, только если вы создаете свои собственные элементы формы.

Но когда я делаю тест со скриптом оповещения, оповещение срабатывает, поэтому ...

Я незнать, как избежать названий отделов.На самом деле, я знаю, что html_escape() работает, но иногда это необходимо, иногда нет, иногда оно ускользает дважды, я немного запутался.

Решением может быть написание html-кода в цикле, иизбежать значения PHP, но есть ли более элегантное решение?

1 Ответ

0 голосов
/ 29 марта 2019

Функция form_dropdown() экранирует значения тега <option value="xxx">Name</option> («xxx» в моем примере), но не слова между тегами («Name» в моем примере).

Чтобы избежать всего, используйте html_escape() в массиве с функцией form_dropdown().

Пример:

$array_data = array(
    'a' => 'Jack',
    '<script>bad_script</script>' => 'John',
    'c' => '<script>another_bad_script</script>'
);

// this will escape the array's key values (Jack and John are ok but not the last one)
echo form_dropdown('select_value', $array_data);

// this will escape the entire array
echo form_dropdown('select_value', html_escape($array_data));
...