Уберите html_tags и дополнительные обратные слеши от TinyMCE <textarea> - PullRequest
1 голос
/ 14 апреля 2019

Я обновляю записи блога в своей собственной CMS, встроенной в PHP и работающей локально на XAMPP.Я загрузил исходные файлы для TinyMCE, плагина WYSIWYG, для добавления и редактирования сообщений.Редактор работает отлично.Он извлекает и отправляет данные так, как предполагается, за исключением одной проблемы;содержимое, представленное в теге textarea, которое включает в себя объект TinyMCE по имени класса, содержит дополнительные обратные косые черты и HTML-теги в реальном отображении сообщения блога.Например, строка текста

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

при вводе в текстовое поле возвращает и отображает

"Вот где появляется CSS (каскадные таблицы стилей). Это язык, который форматирует содержимое страницы и стилизирует весь текст, фон, изображения, границы и т. д. \ r \ n "

Теперь вот где я запутался ...

Я очищаю свои данные перед тем, как связать их как параметр в mysqliподготовленное заявление.Я делаю это, выполняя любые данные, которые хочу очистить, с помощью моей функции clean (), определенной в functions.php.Разве это не должно заботиться о проблеме (как это всегда было до TinyMCE).Процесс очистки и отправки содержимого публикации выглядит следующим образом:

functions.php

    function clean($param){

     global $connection;

     $cleaned = mysqli_real_escape_string($connection, trim(strip_tags($param)));

    return cleaned; 

    }

editPost.php , из которого я 'мы пропустили некоторые из оригинальной разметки формы.Включены только php, обрабатывающий данные формы при отправке, начало формы, блок кода, содержащий содержимое публикации, кнопку отправки и конец формы.В противном случае вы, ребята, пялились бы на много пуха, не связанного с вопросом.

    <?php

    if(isset($_POST['update_post'])) **{**

    $post_author = clean($_POST['post_author']);
    $post_title = clean($_POST['post_title']);
    $post_category_id = clean($_POST['post_category_id']);
    $post_category = clean($_POST['post_category']);
    $post_status = clean($_POST['post_status']);
    $post_image = $_FILES['post_image']['name'];
    $post_image_temp = $_FILES['post_image']['tmp_name'];
    $post_tags = clean($_POST['post_tags']);
    $post_content= clean($_POST['post_content']);
    $post_comment_count = clean($_POST['post_comment_count']);
    $post_date = clean($_POST['post_date']);

    $query = "UPDATE posts SET post_title = ?, post_category_id = ?, post_date = ?, post_author = ? , post_status = ?, post_tags = ?, post_content = ?, post_image = ? WHERE post_id = ?";  

    date_default_timezone_set('America/Los_Angeles');
    $now = date('Y-m-d');

 $stmt = mysqli_stmt_init($connection);
 mysqli_stmt_prepare($stmt, $query);
 mysqli_stmt_bind_param($stmt, 'sissssssi', $post_title, $post_category_id, $now, $post_author, $post_status, $post_tags, $post_content, $post_image, $post_id);


 mysqli_stmt_execute($stmt);
 mysqli_stmt_close($stmt);
 echo "<p class='bg-success'>Post Updated. <a href='../post.php?p_id={$get_post_id}'>View Post, </a> or <a href='posts.php'>Edit More Posts</a></p>";

    }

    ?>

     <form action="" method="post" enctype="multipart/form-data">
     <div class="form-group">
     <label for="post_content">Post Content </label>

     <textarea type="text" class="form-control tinymce" name="post_content" 
      cols="30" rows="10"><?php echo $post_content; ?>
     </textarea>
     </div>

     <div class="form-group">
     <input class="btn btn-primary" type="submit" name="update_post" value="Update Post">
 </div>

admin_footer.php, отрисовано с помощью editPost.php

    <script src="js/jquery.js"></script>
    <script src="js/bootstrap.min.js"></script>
    <script src="js/js/bootstrap.bundle.min.js"></script>
    <script type="text/javascript" src="https://www.google.com/jsapi"> 
    </script>
    <script src ="js/plugins/tinymce/jquery.tinymce.min.js"></script>
    <script src ="js/plugins/tinymce/tinymce.min.js"></script>
    <script type="text/javascript">
    tinymce.init({
        selector: "textarea.tinymce",
        plugins: [
            "advlist autolink link image lists print preview hr anchor pagebreak",
            "searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media",
            "save table contextmenu directionality emoticons template paste textcolor"
            ],

        toolbar: "insertfile undo redo | styleselect | bold italic underline | 
         alignleft aligncenter alignright alignjustify | bullist numlist 
         outdent indent | link image | print preview media fullpage | 
         forecolor backcolor emoticons"



    });
    </script>
    <script src="js/scripts.js"></script>

    </body>
    </html>

Я никогда не получал эти дополнительные символы до использования TinyMCE.Функция очистки работала для меня каждый раз.Единственное, что нужно изменить, - это редактор WYSIWYG, так что я уверен, что проблема связана с ними.Есть ли обходной путь, который я мог бы добавить к clean ()? Я уже пытался добавить html_entity_decode ($ cleaned) и htmlspecialchars_decode ($ cleaned) , но безуспешно.Ничего не изменилось

    function clean($param){
    global $connection;
    $cleaned = mysqli_real_escape_string($connection, trim(strip_tags($param)));
    html_entity_decode($cleaned);
    htmlspecialchars_decode($cleaned);
    return $cleaned;

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...