textarea中的换⾏符问题
下⾯是我对这个问题的解决过程,最后算是完全搞懂了,真是阴沟⾥险些翻船
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 />' 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… 其实我经过测分别替换 \n /n 后直觉告诉我⾃⼰⾛进了死胡同,这不是解决问题的⽅式,肯定有哪⾥存在根本性错误。突然我想到了会不会是单引号或者双引号的问题呢,于是将str_replace(‘\n','<br />') 改成str_replace(“\n”,”<br />”),灵光闪现了,替换成功。巨汗!
⼜打开⼿册把单引号和双引号再看了⼀遍,最后长叹了⼀⼝⽓,还是⾃⼰基础的问题啊,php随简单,还是要注意细节啊。
⼿册中关于单双引号的解释很详细:
指定⼀个简单字符串的最简单的⽅法是⽤单引号(字符‘)括起来。
要表⽰⼀个单引号,需要⽤反斜线(\)转义,和很多其它语⾔⼀样。如果在单引号之前或字符串结尾需要出现⼀个反斜线,需要⽤两个反斜线表⽰。注意如果你试图转义任何其它字符,反斜线本⾝也会被显⽰出来!所以通常不需要转义反斜线本⾝。
如果⽤双引号(”)括起字符串,PHP 懂得更多特殊字符的转义序列:
表格 6-1. 转义字符
序列
含义
\n
换⾏(LF 或 ASCII 字符 0×0A(10))
\r
回车(CR 或 ASCII 字符 0×0D(13))
\t
⽔平制表符(HT 或 ASCII 字符 0×09(9))
\\
反斜线
\$
美元符号
\”
textarea中cols表示双引号
\[0-7]{1,3}
此正则表达式序列匹配⼀个⽤⼋进制符号表⽰的字符
\x[0-9A-Fa-f]{1,2}
此正则表达式序列匹配⼀个⽤⼗六进制符号表⽰的字符
此外,如果试图转义任何其它字符,反斜线本⾝也会被显⽰出来!
———这下textarea换⾏的问题明了了,不是换⾏符的问题,也不是nl2br的问题,是所有的转移只存在双引号中,单引号在php中只做字符处理。多么郁闷的错误啊。以后⼀定的牢记。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论