textarea内容有换行时存入数据库丢失问题的解决


问题现状:

网页开发的过程中需要提供一个文本框给用户输入一段内容,但内容长度有限还没有到使用富文本编辑器插件的地步。因此提供了一个textarea供用户输入。

在调试过程中发现,textarea中的内容在换行的时候html,js都能正确识别出换行。但是当把内容插入数据库后,再读取数据库内容出来到html页面展示的时候换行就丢失了。


去数据库里查询实际插入的内容也发现,实际上插入到数据库的内容里不包含换行了。


由此可以证明,textarea的内容在不加处理的时候插入mysql数据库的时候,换行符会被丢弃。


吐槽:

为了解决这个问题,度娘上搜寻一番,答案真是五花八门。。未经实践就加以转载的现象貌似在技术圈尤其盛行,网上搜出来的技术类文章尤以博客、论坛类为盛,“胡说八道,误人子弟”的现象真是举不胜举。

度娘出来的结果至少前五条没有一条能够解决我的问题。。


甚至文章里低级错误的地方也不少,诸如"\n"写成"/n"的也有,这样不负责任的转载也是让人醉了。

更有甚者,洋洋洒洒写了大几百行的代码,声称“要把解决方法昭告天下”。。(见http://www.blogjava.net/kenzhh/archive/2007/11/20/161826.html)

先不谈该文的正确性与否,就看那满眼乱码式的字符数组声明,敢问代码的可读性。。真是哔了狗了。。要是真要这么复杂才能解决这么一个textarea换行的问题,敢问textarea还有存在的必要性吗?


解决方法:

在百度一番之后,虽然没有获得什么有效解决的方法,但在理解这个问题产生的原因上还是收益良多。

主要是由于textarea存入数据库时,没有带格式存储,会自动将换行给舍弃,因此造成存储在mysql数据库的内容行与行之间连在了一起。


因此我们在存储textarea的内容到数据库之前,需要将换行符也存入数据库。

[html]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. hosts = ohosts.value.replace(/\n|\r\n/g,"<br>");  


上述语句是js语法,将"\n"或者"\r\n"转换为<br>符号后存入数据库。实际上,这里的<br>只是个普通文本了,换成p,q等等都可以,只要到时候数据库读出来的时候做对应的解析处理即可。


从数据库里读出来后,将<br>符再换回去:

[html]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. $tmp = str_replace("<br>",'\r',$hosts);  
上述语句是php语法,这里显示的时候只让回车不让换行,如需换行,替换成"\r\n"即可。


弹窗显示下看看:


问题解决。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值