解析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 MSSQL 存储过程的方法
Dec 24 PHP
php 文件夹删除、php清除缓存程序
Aug 25 PHP
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
Oct 12 PHP
PHP优于Node.js的五大理由分享
Sep 15 PHP
析构函数与php的垃圾回收机制详解
Oct 28 PHP
php实现短信发送代码
Jul 05 PHP
php在数据库抽象层简单使用PDO的方法
Nov 03 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
Apr 11 PHP
PHP中ajax无刷新上传图片与图片下载功能
Feb 21 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
Nov 25 PHP
PHP架构及原理知识点详解
Dec 22 PHP
PHP7 错误处理机制修改
Mar 09 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中文分词的简单实现代码分享
2011/07/17 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
DLL+ ActiveX控件+WEB页面调用例子
2010/08/07 Javascript
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
2010/10/20 Javascript
javascript string字符串优化问题
2011/07/31 Javascript
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
jquery序列化表单以及回调函数的使用示例
2014/07/02 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
Webpack打包css后z-index被重新计算的解决方法
2017/06/18 Javascript
利用yarn代替npm管理前端项目模块依赖的方法详解
2017/09/04 Javascript
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
原生javascript运动函数的封装示例【匀速、抛物线、多属性的运动等】
2020/02/23 Javascript
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
python基础教程之元组操作使用详解
2014/03/25 Python
跟老齐学Python之正规地说一句话
2014/09/28 Python
python实现图像识别功能
2018/01/29 Python
修复 Django migration 时遇到的问题解决
2018/06/14 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
Python OpenCV视频截取并保存实现代码
2019/11/30 Python
python 常见的排序算法实现汇总
2020/08/21 Python
python help函数实例用法
2020/12/06 Python
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
客服实习的个人自我鉴定
2013/10/20 职场文书
会议邀请函范文
2014/01/09 职场文书
药品促销活动方案
2014/02/14 职场文书
幼儿园教学随笔感言
2014/02/23 职场文书
环保口号大全
2014/06/12 职场文书
医学专业自荐信
2014/06/14 职场文书
终止劳动合同证明书样本
2014/11/19 职场文书
举起手来观后感
2015/06/09 职场文书
社区服务理念口号
2015/12/25 职场文书