Использование PHP fWrite для сохранения HTML-данных вызывает проблемы с форматированием

#php #javascript #html #ajax #codeigniter

#php #javascript #HTML #ajax #codeigniter

Вопрос:

Я создал часть своей CMS, которая позволяет администраторам преобразовывать весь текст на странице в текстовые области, чтобы они могли редактировать содержимое. Все содержимое, которое они изменяют, находится внутри div, и я отправляю через jQuery / AJAX содержимое div на контроллер PHP, который обрабатывает данные. Тем не менее, jQuery отлично обрабатывает HTML и отправляет его на контроллер PHP, но PHP удаляет часть содержимого (время от времени удаляя некоторые теги).

Например, если я отправлю

 <div class="cmsedit" style="background-color:#EEE">Hello</div> 
  

он сохранит / запишет файл с этим

 div class="cmsedit">Hello</div> .
  

Он удаляет открывающую скобку для div и b. Он не делает это постоянно. Если я не включаю тег стиля, обычно код остается в порядке.

Вот код, который я использую на странице javascript.

 $('.save_page').click(function(){
    updated_content = $('.content_to_be_edited').html();
    edit_page = $('#edit_page_name').val();
    $.post("<?=site_url('admin/update_page_data') ?>", { content:updated_content,page_name:edit_page });    
});
  

Вот страница контроллера PHP

     $page_content = $this->input->post('content');
    $page_name = $this->input->post('page_name');       
    $filename = $_SERVER['DOCUMENT_ROOT']."/application/views/".$page_name.".php";

    // SAVE NEW FILE
    $file = fopen($filename, 'w') or die("Can't open file");
    $filedata = htmlspecialchars_decode($page_content);
    fwrite($file, $filedata);
    fclose($file);
  

У кого-нибудь есть идеи, почему теги становятся запутанными, когда PHP обрабатывает данные? Спасибо!!

Комментарии:

1. Вы выполнили echo для $page_content, чтобы убедиться, что вы получаете его правильно?

Ответ №1:

Скорее всего, у вас активирован фильтр codeigniter XSS, который уничтожит ваши данные.

Вы можете отключить его, и тогда он должен работать.

Комментарии:

1. Хороший вызов. Об этом не подумал. Спасибо.