javascript / html / php在textarea中捕获换行符

时间:2012-11-21 12:02:54

标签: javascript textarea line-breaks

我拼命想要捕捉textarea中的换行符。我想将textarea的内容存储在数据库中,然后在从数据库中提取时将其显示在textarea中。 textarea应该作为编辑框。在任何时候我都不需要以html显示。

我能够在普通的html页面上工作,将textarea内容发布到服务器,方法是将文本从textarea转换为行数组,在字符\ r \ n上爆炸,并将其插入到以逗号分隔的行列表。然后,当我想重新显示这些行时,我用\ n替换逗号,并使用换行符获取文本,我可以在textarea中显示。有点黑客但它有效。

然而,当使用html将textarea内容发布到服务器而不是在javascript中使用getElementByID拉出它们然后在javascript中发布到服务器时,它似乎不起作用。

当我使用html获取textarea内容并在\ r \ n上爆炸时,我得到一个包含与行数一样多的元素的数组。

然而,当我在javascript中使用getElementByID拉取textarea内容,并在\ r \ n上爆炸时,我只是在阵列中运行一行元素。换句话说,我没有得到换行符

任何人都知道为什么在javascript中提取文本并且有关于如何在javascript中保留换行符的任何建议时,换行符会消失?

感谢。

缩写代码: 的JavaScript

getText() {

var textobj = document.getElementById("text");
var text = textobj.value;

...some code for AJAX


    document.getElementById("droptext").innerHTML=xmlhttp.responseText;
... some more code for Ajax

xmlhttp.open("GET","savetext.php?text="+text,true);
xmlhttp.send();
}

HTML

<div id="droptext"><textarea id="text"><textarea></div>
<a href="javascript:void(0);" onclick="getText();">Save Text</a>

PHP

$text = $_GET['text'];
$textarray = explode("\r\n", $text);
$text = implode(",",$textarray); //converts to comma delimited list

...store in database

...fetch from database and echo text back for editing

$text = $row['text'];
$text = str_replace( ",", "\n", $text);

echo '<textarea>'.$text.'</textarea>';

2 个答案:

答案 0 :(得分:1)

在另一个问题上找到答案。

JavaScript: How to add line breaks to an HTML textarea?

Javascript在向服务器提交请求时不会对其进行urlencode换行。他们基本上消失了。因此,您需要在请求之前在javascript中执行自己的urlencoding。

var text2 = text.replace("\n\r","&#13;&#10;");

请注意,在其他讨论中有一些建议,即POST和GET请求的urlencoding在不同语言中的处理方式不同,但是当我测试时,我并没有区别。

答案 1 :(得分:0)

存储未修改的整个内容有什么问题?我不知道你正在使用什么数据库,但大多数应该支持带换行符的文本字段。

如果仍然存在问题,可能问题是使用“\ r \ n”,您能告诉我们发送到服务器的内容吗?

另外你的php返回的textarea是错误的id,这会阻止你多次使用getText。