解析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 相关文章推荐
数字转英文
Dec 06 PHP
DISCUZ 分页代码
Jan 02 PHP
MySQL授权问题总结
May 06 PHP
用PHP实现维护文件代码
Jun 14 PHP
win7+apache+php+mysql环境配置操作详解
Jun 10 PHP
php不用正则验证真假身份证
Nov 06 PHP
PHP实现通用alert函数的方法
Mar 11 PHP
PHP代码实现表单数据验证类
Jul 28 PHP
变量在 PHP7 内部的实现(一)
Dec 21 PHP
基于php判断客户端类型
Oct 14 PHP
laravel使用Faker数据填充的实现方法
Apr 12 PHP
PHP实现带进度条的Ajax文件上传功能示例
Jul 02 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代码(星期六,星期日总和)
2009/11/12 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
laravel添加前台跳转成功页面示例
2019/10/22 PHP
JS打印gridview实现原理及代码
2013/02/05 Javascript
JavaScript 函数replace深入了解
2013/03/14 Javascript
jquery中获取元素里某一特定子元素的代码
2014/12/02 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
2014/12/18 Javascript
jquery自动补齐功能插件flexselect用法示例
2016/08/06 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
Angular2 PrimeNG分页模块学习
2017/01/14 Javascript
js中删除数组中的某一元素实例(无下标时)
2017/02/28 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
微信小程序联网请求的轮播图
2017/07/07 Javascript
JQuery Ajax动态加载Table数据的实例讲解
2018/08/09 jQuery
JS实现简单日历特效
2020/01/03 Javascript
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
JavaScript链式调用原理与实现方法详解
2020/05/16 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
基于Pandas读取csv文件Error的总结
2018/06/15 Python
对Python捕获控制台输出流的方法详解
2019/01/07 Python
cProfile Python性能分析工具使用详解
2019/07/22 Python
Win10系统下安装labelme及json文件批量转化方法
2019/07/30 Python
Python的历史与优缺点整理
2020/05/26 Python
JRE、JDK、JVM之间的关系怎样
2012/05/16 面试题
办公室主任职责范本
2014/03/07 职场文书
做一个有道德的人活动实施方案
2014/08/23 职场文书
解除聘用合同证明书范本
2014/09/11 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
英语教师个人工作总结
2015/02/09 职场文书
会计岗位职责范本
2015/04/02 职场文书
介绍信范文大全
2015/05/07 职场文书
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python
Python tensorflow卷积神经Inception V3网络结构
2022/05/06 Python
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL