文本区域重复所有换行符
今天我遇到了一个很奇怪的textarea行为。我整整一天都在修复这个问题,但还是找不到解决办法。非常感谢任何帮助。
我正在创建一个GAE-python应用程序。这里有一个小表单:
<form action="/add" method="post">
<div><textarea name="Name" rows="1" cols="60">name</textarea></div>
<div><textarea name="Email" rows="1" cols="60">email</textarea></div>
<div><textarea name="Comments" rows="6" cols="60">comments</textarea></div>
<div><input type="submit" value="Post"></div>
</form>
我通过POST请求把数据(“评论”字段)发送到python脚本。但是……
不知怎么的,我总是在最后得到双换行符,或者说双CrLf,这些都存储在数据库里。但奇怪的是,当我调试请求时,在FireFox+Firebug和Chrome+DevTools中都有些奇怪的现象。
举个例子,我在textarea中写并发送了这些评论内容:
c
c
c
在经过URL编码的数据中,我看到的是c%0D%0Ac%0D%0Ac
所以它应该是cCrLfcCrLfc
但是当我从FireBug(DevTools)复制未编码的变量到NotePad++时,它显示的是:
c CRLF
CRLF
c CRLF
CRLF
c CRLF
CRLF
为什么在解码格式中会变成双倍的?!当然,当我从数据库打印结果到浏览器时,所有的换行符都是双倍的。(当我通过“Datastore Viewer”查看这个实体的TextProperty时,它只写成“c c c”)。
还有一件事:
我有一个Flash应用,它向同一个python脚本发送POST请求,而在Flash的文本框中输入的所有换行符都能正确写入。但是如果我只是尝试通过浏览器的textarea打开那个数据库实体并直接保存(不编辑),我又会收到所有换行符双倍的情况。
有没有什么解决办法呢?
谢谢。
1 个回答
根据规定和浏览器的实际情况,用户在文本框中输入的换行符会被传输为一对CR LF,经过编码后变成%0D%0A。大概率上,你的服务器脚本接收到的就是这个内容,不过你可以通过查看原始数据来确认这一点。接下来发生的事情就取决于你的脚本以及它与数据库的互动了。
不同的操作系统和程序有不同的换行符标准,最常见的有CR单独使用、LF单独使用和CR LF这对组合,而最后一种是互联网的通用做法。因此,有可能某些软件组件把CR LF当作两个独立的控制字符来处理,每个字符都表示一个换行,然后在后面的某个阶段,这些字符又被统一处理成CR LF(或者看起来像CR LF的东西)。