php表单转换textarea换行符的方法

今天在项目中遇到一个textarea换行的问题,调试了半天都没有解决。要将textarea里的回车换行转换成br存入数据库。

下面是我对这个问题的解决过程,最后算是完全搞懂了,真是阴沟里险些翻船

1.必须知道textarea中的换行符是 n (个人检测发现按回车键是n,好像在linux下是rn)

2.用nl2br之前,请仔细看好手册解释,我就是搞郁闷了,一般都理解为将n转换成<br >,其实不是的:

看php手册解释:

nl2br &ndash; Inserts HTML line breaks before all newlines in a string

Returns string with ‘<br />' inserted before all newlines

意思是说在 新的一行前插入<br />

w3cschool上的说法是:

nl2br() 函数在字符串中的每个新行 (n) 之前插入 HTML 换行符 (<br />)。

所以nl2br()能够插入<br> 但 n 依旧存在,比如说 字符串源码是:程序n生活网,我们nl2br 之后就是 程序<br>n生活网 所以我们看到的效果将是

程序

生活网———————-换行了,因为源码中还有n

3.用php函数,str_replace替换函数,比如str_replace(‘n','<br />') ,问题是替换并没有成功,一直都没有替换掉,我弄了好久甚至开始怀疑textarea中的换行符是不是n,现在想想真是太动摇了,o(∩_∩)o&hellip; 其实我经过测 分别替换 n /n 后直觉告诉我自己走进了死胡同,这不是解决问题的方式,肯定有哪里存在根本性错误。突然我想到了会不会是单引号或者双引号的问题呢,于是将str_replace(‘n','<br />') 改成str_replace(“n”,”<br />”),灵光闪现了,替换成功。巨汗!

又打开手册把单引号和双引号再看了一遍,最后长叹了一口气,还是自己基础的问题啊,php随简单,还是要注意细节啊。

手册中关于单双引号的解释很详细:

单引号

指定一个简单字符串的最简单的方法是用单引号(字符 ‘)括起来。

要表示一个单引号,需要用反斜线()转义,和很多其它语言一样。如果在单引号之前或字符串结尾需要出现一个反斜线,需要用两个反斜线表示。注意如果你试图转义任何其它字符,反斜线本身也会被显示出来!所以通常不需要转义反斜线本身。

————–所以我们用str_replace(‘n','<br />')替换的 字符串中的 n 而不是换行符,似乎有些晕。也就是说单引号内的是字符串,php不做任何解释,这其实在别的地方用的时候都知道,但没想到连换行符都不解释。 双引号

如果用双引号(”)括起字符串,PHP 懂得更多特殊字符的转义序列:

表格 6-1. 转义字符

序列
含义

n
换行(LF 或 ASCII 字符 0×0A(10))

r
回车(CR 或 ASCII 字符 0×0D(13))

t
水平制表符(HT 或 ASCII 字符 0×09(9))

\
反斜线

$
美元符号


双引号

[0-7]{1,3}
此正则表达式序列匹配一个用八进制符号表示的字符

x[0-9A-Fa-f]{1,2}
此正则表达式序列匹配一个用十六进制符号表示的字符

此外,如果试图转义任何其它字符,反斜线本身也会被显示出来!

———这下textarea换行的问题明了了,不是换行符的问题,也不是nl2br的问题,是所有的转移只存在双引号中,单引号在php中只做字符处理。多么郁闷的错误啊。以后一定的牢记。

时间: 2024-10-01 03:34:16

php表单转换textarea换行符的方法的相关文章

php表单转换textarea换行符的方法_php技巧

下面是我对这个问题的解决过程,最后算是完全搞懂了,真是阴沟里险些翻船 1.必须知道textarea中的换行符是 \n  (个人检测发现按回车键是\n,好像在linux下是\r\n) 2.用nl2br之前,请仔细看好手册解释,我就是搞郁闷了,一般都理解为将\n转换成<br >,其实不是的: 看php手册解释: nl2br –  Inserts HTML line breaks before all newlines in a string Returns string with '<br

php textarea换行符的方法

涉及到textarea中的换行,因为填入的内容是base64编码之后的结果(规范规定,base64编码结果中每76个字符需要加上一个回车换行,即一个" "),在ie下测试,一切ok,但是到了firefox和谷歌浏览器下,总是提示错误,细查一下,发现不同浏览器对于换行符处理不同造成的. 在ie下,换行符传入 在firefox和谷歌浏览器下,换行符只传入了 因为后台程序默认是按照处理的,所以字符串就不匹配了. 解决办法:如果发现传入的字符串只有,没有,则用正则表达式将替换成,然后再进行业务

JS转换HTML转义符的方法_javascript技巧

//去掉html标签 function removeHtmlTab(tab) { return tab.replace(/<[^<>]+?>/g,'');//删除所有HTML标签 } //普通字符转换成转意符 function html2Escape(sHtml) { return sHtml.replace(/[<>&"]/g,function(c){return {'<':'<','>':'>','&':'&

ThinkPHP表单令牌错误的相关解决方法分析

本文分析了ThinkPHP表单令牌错误的相关解决方法.分享给大家供大家参考,具体如下: 今天在用ThinkPHP做程序的时候,以前用create创建数据的时候,出现了错误提示"表单令牌错误",然后各种百度各种谷歌,得到的网上解答给出了以下的建议 1.清缓存: 用了,我把所有的Cache下的文件都删掉了,并将~app.php和~runtime.php两个文件同时都删掉了,但是没有效果. 2.将TOKEN_ON参数设置为FALSE: 试过了,但是也不行,虽然不提示表单令牌错误了,但是添加到

js控制表单奇偶行样式的简单方法

这篇文章介绍了js控制表单奇偶行样式的简单方法,有需呀偶的朋友可以参考一下   一.如果使用JQuery的话可以直接JQuery的 复制代码 代码如下: $("tr:odd").addClass("clazzName"); $("tr:even").addClass("clazzName"); 二.如果是使用纯js的话 1.先获取table标签,var table = document.getElementById() 2.再

jquery控制表单输入框显示默认值的方法

  本文实例讲述了jquery控制表单输入框显示默认值的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 <!DOCTYPE html> <html> <head> <script language="javascript" src=&quo

JavaScript获取表单内所有元素值的方法

 本文实例讲述了JavaScript获取表单内所有元素值的方法.分享给大家供大家参考.具体如下: 下面的JS代码可以遍历指定表单中的所有元素,并输出元素的值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <!DOCTYPE html> <html> <body> <form id="frm1" action="form_action.aspx"> First name:

jquery提交form表单时禁止重复提交的方法

 这篇文章主要介绍了jquery提交form表单时禁止重复提交的方法,需要的朋友可以参考下    代码如下: $(document).ready(function() {   $('form').submit(function() {     if(typeof jQuery.data(this, "disabledOnSubmit") == 'undefined') {       jQuery.data(this, "disabledOnSubmit", { s

php解决和避免form表单重复提交的几种方法_php技巧

前言 为什么要避免form表单被重复提交呢?因为我们不想让我们的服务器重复处理没必要的数据,同时我们也是避免我们的数据库产生重复的数据,避免表单重复提交也是让我们的网站更安全的一种表现. 先看一下有哪些情况下回导致表单重复提交呢,知道哪些情况下可能会出现表单重复提交就可以从根源处理表单重复提交的情况了. 下面的情况就会导致表单重复提交:       点击提交按钮两次.       点击刷新按钮.       使用浏览器后退按钮重复之前的操作,导致重复提交表单.       使用浏览器历史记录重复