在数据库中保存summernote的问题

Posted

技术标签:

【中文标题】在数据库中保存summernote的问题【英文标题】:issue saving summernote in DB 【发布时间】:2017-04-30 13:14:15 【问题描述】:

我在使用 ajax 在 DB 中保存 Summernote 值时遇到问题,但是当我不使用 ajax 时,一切正常。

说清楚。

<?php
  include 'db.php';
  $db=new db;

  if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
    if($_POST['act']=='save')
      $content=$_POST['content'];
      $id=25;

      $query="UPDATE content SET content=? WHERE id=?";
      $db->execquery($query, 'si', array($content, $id));
      echo json_encode(array("response"=>'success'));
      exit();
    
  
?>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> 
  <title>summernote</title>
  <!-- include jquery -->
  <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> 

  <!-- include libraries BS3 -->
  <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.1/css/bootstrap.min.css" />
  <script type="text/javascript" src="//netdna.bootstrapcdn.com/bootstrap/3.0.1/js/bootstrap.min.js"></script>

  <!-- include summernote -->
  <link rel="stylesheet" href="../dist/summernote.css">
  <script type="text/javascript" src="../dist/summernote.js"></script>

  <script type="text/javascript">
    $(function() 
      $('.summernote').summernote(
          toolbar: [
            // [groupName, [list of button]]
            ['style', ['bold', 'italic', 'underline', 'clear']],
            ['font', ['strikethrough', 'superscript', 'subscript']],
            ['fontsize', ['fontsize']],
            ['color', ['color']],
            ['para', ['ul', 'ol', 'paragraph']],
            ['height', ['height']]
          ]
        );

      $('form').on('submit', function (e) 
        e.preventDefault();

        content=$('.summernote').summernote('code');
        data='act=save&content='+content;
        $.ajax(
          type: "POST",
          dataType: "JSON",
          data: data,
        )
        .fail(function(e)
            alert(e.response);
        )
        .done(function(data)
            if(data.response=='success')
                alert('success!');
            
        );
      );
    );
  </script>
</head>
<body>
<form action="#" novalidate>
  <div class="form-group">
    <label for="input">Text</label>
    <textarea class="form-input" id="input"></textarea>
  </div>
  <div class="form-group">
    <label for="contents">Contents</label>
    <textarea name="text" class="summernote" id="contents" title="Contents"></textarea>
  </div>
  <button type="submit" class="btn btn-default">submit</button>
</form>
</body>
</html>

无论如何,当我在summernote中输入简单的文本时,值会被保存,但是当我从msword中粘贴一些文本时,保存的值会被剪切。

我尝试了一些方法,当我按下提交时,我还将summernote 值放入额外的文本区域,然后当我将值手动粘贴到数据库中时,一切都很好。我还尝试复制代码视图值,然后手动粘贴到数据库中,这也很好。请帮忙。

提前致谢!

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,我用以下方法解决了它:

Javascript

content = encodeURIComponent($('.summernote').summernote('code'));

PHP

urldecode($_POST[content])

【讨论】:

警告超全局变量 $_GET 和 $_REQUEST 已经解码。对 $_GET 或 $_REQUEST 中的元素使用 urldecode() 可能会产生意想不到的危险结果。 php.net

以上是关于在数据库中保存summernote的问题的主要内容,如果未能解决你的问题,请参考以下文章

在数据库中保存summernote的问题

django_summernote 所写内容的标签已暴露,未应用

如何将通过summernote生成的大型base64图像保存在我的数据库中?

Summernote(数据未保存在数据库中)(laravel 5.2)

尝试使用 Summernote 编辑器将图像 url 保存到数据库时删除样式属性

如何使用流星JS在summernote中收取数据?