Насколько я понимаю, вы хотели бы сохранить отправленный пользователем текст в базе данных, а затем отобразить его на странице - что-то вроде базовой системы комментирования или чего-то еще. Вы просто не хотите, чтобы при выводе этой страницы какие-либо непослушные / неполные символы HTML ломали вашу страницу.
Всякий раз, когда у вас есть данные, отправленные пользователем, вы хотите использовать библиотеку form_validation, чтобы очистить ее и очистить как можно больше, что является хорошей мерой безопасности. Если он попадает в вашу базу данных, вы должны использовать Active Records или Query Binding, чтобы получить дополнительную защиту от Codeigniter, например, экранирование строк и т. Д.
Позвольте мне показать мое решение по отправке и выводу информации пользователя на веб-сайте. Вероятно, есть лучшие способы сделать это, но это сделает работу.
<?php
/*Controller
**************************************************/
class Something extends CI_Controller {
function comments_or_whatever() {
//Required -> trim value -> max_length of 100 -> strip HTML tags -> remove additional HTML entities missed by strip tags
$this->form_validation->set_rules('input_1', 'The First User Input', 'required|trim|max_length[100]|xss_clean|strip_tags|callback__remove_html_entities');
$this->form_validation->set_rules('input_2', 'The Second User Input', 'trim|exact_length[11]|xss_clean|strip_tags|callback__remove_html_entities');
if ($this->form_validation->run() == FALSE) {
//form didn't validate.. try again display error messages
$this->load->view('your_view');
}
} else {
$input_1 = $this->input->post('input_1');
$input_2 = $this->input->post('input_2');
$submission_array = array(
'db_field_1' => $input_1,
'db_field_2' => $input_2
);
$this->load->model('comments');
$result = $this->comments->submit_comments_or_whatever($submission_array);
if ($result['is_true'] == TRUE) {
//creates a temporary flash message and redirects to current page
//if on a windows server use 'refresh' instead of 'location'
$this->session->set_flashdata('message', '<div class="message">'.$result['message'].'</div>');
redirect('something', 'location');
} else {
$data['message'] = $result['message'];
$this->load->view('your_view', $data);
}
}
}
// Very important to get rid calling HTML Entities via HTML number codes such as < etc. Strip_tags does not do this.
// This is privately called during validation from the callback__remove_html_entities custom callback
function _remove_html_entities($submission) {
$submission = preg_replace("/&#?[a-z0-9]{2,8};/i","",$submission);
return $submission;
}
}
/* Model
****************************************/
class Comments extends CI_Model {
function submit_comments_or_whatever($submission_array) {
// Active record escapes string and does additional security
$query = $this->db->insert('comments', $submission_array);
if ($query == TRUE) {
$data['is_true'] = TRUE;
$data['message'] = 'Your message has been successfully shared!';
return $data;
} else {
$data['is_true'] = FALSE;
$data['message'] = 'Sorry, but there was an error dude inserting your message into the database.';
return $data;
}
}
}
/* View -> your_view.php
****************************************/
<?php echo validation_errors('<div class="message">', '</div>'); ?>
<?php echo $this->session->flashdata('message'); ?>
<?php if (!empty($message)) echo '<div class="message">'.$message.'</div>'; ?>
<?php echo form_open('something/comments_or_whatever'); ?>
<?php echo form_label('The First User Input', 'input_1'); ?><br>
<?php $input_1_form = array('name' => 'input_1', 'id' => 'input_1', 'value' => set_value('input_1')); ?>
<?php echo form_input($input_1_form); ?><br>
<?php echo form_label('The Second User Input', 'input_2'); ?><br>
<?php $input_2_form = array('name' => 'input_2', 'id' => 'input_2', 'value' => set_value('input_2')); ?>
<?php echo form_input($input_2_form); ?><br>
<?php echo form_submit('submit', 'Dude, submit my user inputed text!'); ?>
<?php echo form_close(); ?>
В этом коде предполагается, что вы автоматически загружаете валидацию форм, сеансы, библиотеки баз данных и помощник по формам. Теперь все введенные пользователем данные сокращаются до минимума обычного текста с помощью пользовательского обратного вызова регулярного выражения во время проверки формы. Все непослушные символы HTML полностью удалены. Теперь вы можете без проблем выводить отправленные данные в любое место на веб-странице, не нарушая и не заботясь о безопасности.
Проблема только с выполнением HTMLSpecialChars () и html декодированием заключается в том, что он не учитывает неполные теги HTML. Надеюсь, это поможет, удачи, чувак, и, как всегда, ничто не может быть абсолютно безопасным.