解析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 相关文章推荐
dedecms防止FCK乱格式化你的代码的修改方法
Mar 17 PHP
PHP 网页过期时间的控制代码
Jun 29 PHP
备份mysql数据库的php代码(一个表一个文件)
May 28 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
Jun 21 PHP
PHP函数http_build_query使用详解
Aug 20 PHP
php打印输出棋盘的实现方法
Dec 23 PHP
php的闭包(Closure)匿名函数详解
Feb 22 PHP
10条php编程小技巧
Jul 07 PHP
PHP版单点登陆实现方案的实例
Nov 17 PHP
Yii2.0中使用js异步删除示例
Mar 10 PHP
php实现与python进行socket通信的方法示例
Aug 30 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
Jan 26 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-5.2 的 php.ini 中文版[金步国翻译]
2011/04/17 PHP
如何用php生成扭曲及旋转的验证码图片
2013/06/07 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
php的ajax简单实例
2014/02/27 PHP
PHP处理JSON字符串key缺少双引号的解决方法
2014/09/16 PHP
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
jquery Mobile入门—外部链接切换示例代码
2013/01/08 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
深入浅析JavaScript中的constructor
2016/04/19 Javascript
深入理解React高阶组件
2017/09/28 Javascript
JS计算输出100元钱买100只鸡问题的解决方法
2018/01/04 Javascript
JS验证输入的是否是数字及保留几位小数问题
2018/05/09 Javascript
JavaScript事件冒泡与事件捕获实例分析
2018/08/01 Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
2019/06/05 Javascript
微信小程序关键字变色实现代码实例
2019/12/13 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
2020/07/28 Javascript
Vue实现摇一摇功能(兼容ios13.3以上)
2021/01/26 Vue.js
python实现用户登录系统
2016/05/21 Python
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
Python对多属性的重复数据去重实例
2018/04/18 Python
深入学习python多线程与GIL
2019/08/26 Python
详解python中docx库的安装过程
2019/11/08 Python
wxpython绘制音频效果
2019/11/18 Python
Anaconda的安装与虚拟环境建立
2020/11/18 Python
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
西班牙香水和化妆品连锁店:Druni
2019/05/05 全球购物
学校岗位设置方案
2014/01/16 职场文书
西安交大自主招生自荐信
2014/01/27 职场文书
文明村镇申报材料
2014/05/06 职场文书
开工仪式策划方案
2014/05/23 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
认错检讨书
2014/10/02 职场文书
租车协议书
2015/01/27 职场文书
Javascript 解构赋值详情
2021/11/17 Javascript