解析PHP处理换行符的问题 \r\n


Posted in PHP onJune 13, 2013

一首先说说 \r 与\n的区别
回车”(Carriage Return)和“换行”(Line Feed)这两个概念的来历和区别。
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33,Linux/Unix下的tty概念也来自于此)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。

后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

Unix系统里,每行结尾只有“<换行>”,即"\n";Windows系统里面,每行结尾是“<换行><回车 >”,即“\n\r”;Mac系统里,每行结尾是“<回车>”,即"\n";。一个直接后果是,Unix/Mac系统下的文件在 Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

c语言编程时(windows系统)
\r 就是return 回到 本行行首 这就会把这一行以前的输出 覆盖掉。
如: (注以下是C++代码)
最后只显示 xixi 而 hahaha 背覆盖了

int main ()
{
cout << "hahaha" << "\r" << "xixi" ;
}

\n 是回车+换行 把光标 先移到 行首 然后换到下一行 也就是 下一行的行首拉
int main()
{
cout << "hahaha" << "\n" << "xixi" ;
}

二换行符的表现形式
在普通文件里如(.txt,.php等)换行符是"\r\n", "\n", "\r"。但表现在HTML文件里时(这里说明一下:HTML的TEXTAREA文本域里的换行也是"\r"或“\n”)是“<br/>”标签。
使用PHP脚本可以进转换。
代码如下(来至PHP手册):
//Order of replacement
$str="Line1\nLine2\rLine3\r\nLine4\n";
$order=array("\r\n","\n","\r");
$replace='<br/>';
$newstr=str_replace($order,$replace,$str);
PHP 相关文章推荐
php中批量删除Mysql中相同前缀的数据表的代码
Jul 01 PHP
用PHP读取超大文件的实例代码
Apr 01 PHP
PHP 过滤页面中的BOM(实现代码)
Jun 29 PHP
解析PHP 5.5 新特性
Jul 02 PHP
基于php中使用excel的简单介绍
Aug 02 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
Nov 22 PHP
PHP调试函数和日志记录函数分享
Jan 31 PHP
PHP实现根据银行卡号判断银行
Apr 29 PHP
基于php实现随机合并数组并排序(原排序)
Nov 26 PHP
php cookie 详解使用实例
Nov 03 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
Jun 07 PHP
PHP children()函数讲解
Feb 03 PHP
基于PHP5魔术常量与魔术方法的详解
Jun 13 #PHP
基于PHPExcel的常用方法总结
Jun 13 #PHP
深入PHP FTP类的详解
Jun 13 #PHP
PHP代码审核的详细介绍
Jun 13 #PHP
PHP设计模式之调解者模式的深入解析
Jun 13 #PHP
PHP设计模式之迭代器模式的深入解析
Jun 13 #PHP
PHP设计模式之解释器模式的深入解析
Jun 13 #PHP
You might like
用PHP实现登陆验证码(类似条行码状)
2006/10/09 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
PHP中exec函数和shell_exec函数的区别
2014/08/20 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
PHP dirname(__FILE__)原理及用法解析
2020/10/28 PHP
jquery图片上下tab切换效果
2011/03/18 Javascript
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
JavaScript设计模式之单件模式介绍
2014/12/28 Javascript
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
2015/06/30 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
AngularJS 依赖注入详解及示例代码
2016/08/17 Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
2016/08/25 Javascript
AngularJS入门教程之表单校验用法示例
2016/11/02 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
[03:14]2014DOTA2西雅图国际邀请赛 EG战队巡礼
2014/07/07 DOTA
[00:12]2018DOTA2亚洲邀请赛SOLO赛 MidOne是否中单第一人?
2018/04/05 DOTA
python正则匹配查询港澳通行证办理进度示例分享
2013/12/27 Python
Python多线程编程(六):可重入锁RLock
2015/04/05 Python
Sanic框架路由用法实例分析
2018/07/16 Python
Python微信操控itchat的方法
2019/05/31 Python
pytorch 实现打印模型的参数值
2019/12/30 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
python爬虫爬取监控教务系统的思路详解
2020/01/08 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
蛋糕店的商业计划书范文
2014/01/27 职场文书
销售团队获奖感言
2014/08/14 职场文书
爬山的活动方案
2014/08/16 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
新学期主题班会
2015/08/17 职场文书
靠谱准确的求职信
2019/04/02 职场文书
护士年终工作总结不会写?各科护士模板总结
2020/01/02 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书