【问题标题】:How to save user input linebreak to database. (jQuery/php/mysql)如何将用户输入的换行符保存到数据库。 (jQuery/php/mysql)
【发布时间】:2011-12-30 00:46:47
【问题描述】:

问题是: 如何将用户输入的换行符保存到数据库。 (jQuery/php/mysql)

我有一个用户可以编辑的段落。

<p contenteditable="true" id="forbiddenField">Text</p>

当我从数据库中检索数据时:

<p contenteditable="true" id="forbiddenField"><?php echo nl2br($forbidden); ?></p>

效果很好。

onblur (.blur) 将激活一个 jQuery 脚本,它将新编辑的数据发送到数据库。

$("#forbiddenField").blur(function(){
        var whatIsNowForbidden = encodeURI($("#forbiddenField").text());

        $.ajax({
            type: "POST",  
            url: "updateForbidden.php",  
            data: "forbiddenStuff="+ whatIsNowForbidden,
            success: function(){
            }  
        });
});

问题: 如果用户插入新数据,带有换行符,那么数据库中的数据不会添加换行符,只会添加内容。

我尝试了以下方法: var whatIsNowForbidden = encodeURI($("#forbiddenField").text());

我查看了这些地方的答案: New Line in Textarea to be converted to <br/> http://www.w3schools.com/tags/ref_urlencode.asp Is replacing a line break UTF-8 safe? how to escape input but save unescaped into the database How to recognize every linebreak?

我无法让它工作。 非常感谢所有输入和提示!

【问题讨论】:

  • 第一件事:你确定回车没有保存在数据库中吗?另外,您如何使您的段落 (&lt;p&gt;&lt;/p&gt;) 可编辑?
  • 什么占用了换行符的空间?空间?标签?什么都没有?
  • 中的 contenteditable="true" 使其可编辑:)

  • 请问:“回车”是什么意思?
  • 也不确定您所说的“什么占用了换行符的空间?”如果我做一个警报();我得到的段落值: alert(encodeURI($("#forbiddenField").text()));文本: Föbjudet: allt som inte är tillåtet。 (禁止:所有不允许的) 另一行在这里。给出:F%C3%B6bjudet:%20allt%20som%20inte%20%C3%A4r%20till%C3%A5tet.%20(禁止:%20All%20that%20is%20not%20allowed)Another%20line%20down%20here .

标签: php jquery mysql


【解决方案1】:

尝试从您的 javascript 中删除 encodeURI() 函数,如下所示:

var whatIsNowForbidden = $("#forbiddenField").text();

我做了一个小提琴来测试这个,javascript的encodeURI()函数似乎没有像我们预期的那样将段落中的新行翻译成%0A

通过删除函数encodeURI() PHP 应该能够将文本(包括新行)保存到数据库中。然后,PHP 的nl2br() 应该将新行转换为&lt;br /&gt; 标记没有问题。

小提琴可以在这里找到:http://jsfiddle.net/LN7QC/

最终答案:使用&lt;textarea&gt;

jQuery:

$("#forbiddenField").blur(function(){
        var whatIsNowForbidden = $("#forbiddenField").val();

        $.ajax({
            type: "POST",  
            url: "updateForbidden.php",  
            data: "forbiddenStuff="+ whatIsNowForbidden,
            success: function(){
            }  
        });
});

添加到数据库:

<?php
    include('connect.php');

            if($_POST['forbiddenStuff']){
                $forbiddenInput = $_POST['forbiddenStuff'];
            }


    If($forbiddenInput){
        mysql_query("SET NAMES 'utf8'");
        $changeDataInDB = "UPDATE heroes_and_helpers SET forbidden='$forbiddenInput' WHERE name ='sabina'";
        mysql_query($changeDataInDB);

    }
?>

从数据库中获取:

   mysql_query("SET NAMES 'utf8'");
    $fetchForbidden = mysql_query("SELECT * FROM heroes_and_helpers WHERE name='sabina'");

        if (!$fetchForbidden)
          {
          die('Ngt ar fel: ' . mysql_error());
          }

    $whatIsForbidden = mysql_fetch_array($fetchForbidden); 
    $forbidden = $whatIsForbidden['forbidden'];

在网站上:

<textarea id="forbiddenField" style="width: 450px; height: 500px;"><?php echo $forbidden; ?></textarea>

【讨论】:

  • 它对我不起作用。我在 localhost 上工作有关系吗?
  • 没关系。我们可以看到updateForbidden.php文件代码吗?
  • 另外,尝试将段落更改为&lt;textarea&gt;&lt;/textarea&gt;...我从段落中得到了一些非常奇怪的行为。 encodeURI() 似乎在文本区域中编码换行符,但不在段落中。 jsfiddle.net/LN7QC/1
  • 一切都适用于 时我必须删除所有 nl2br
  • 感谢您的帮助! :D
猜你喜欢
  • 2015-04-25
  • 2021-03-30
  • 2014-06-22
  • 2017-05-21
  • 1970-01-01
  • 2018-02-27
  • 2011-04-01
  • 1970-01-01
相关资源
最近更新 更多