解析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数组的使用方法小结
Sep 23 PHP
php中设置多级目录session的问题
Aug 08 PHP
深入理解PHP中的Session和Cookie
Jun 21 PHP
如何在php中正确的使用json
Aug 06 PHP
PHP的变量类型和作用域详解
Mar 12 PHP
php返回json数据函数实例
Oct 09 PHP
php获取字符串中各个字符出现次数的方法
Feb 23 PHP
php实现统计目录文件大小的函数
Dec 25 PHP
必须收藏的23个php实用代码片段
Feb 02 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
Jul 25 PHP
curl 出现错误的调试方法(必看)
Feb 13 PHP
PHP 图片合成、仿微信群头像的方法示例
Oct 25 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递归遍历删除文件的方法
2015/04/17 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
IE8 引入跨站数据获取功能说明
2008/07/22 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
JS OffsetParent属性深入解析
2014/01/13 Javascript
js根据日期判断星座的示例代码
2014/01/23 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
noty ? jQuery通知插件全面解析
2016/05/18 Javascript
javascript类型系统_正则表达式RegExp类型详解
2016/06/24 Javascript
canvas知识总结
2017/01/25 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
Vue.directive 自定义指令的问题小结
2018/03/04 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
python3编写C/S网络程序实例教程
2014/08/25 Python
在Python下进行UDP网络编程的教程
2015/04/29 Python
Python学习思维导图(必看篇)
2017/06/26 Python
详解Python使用tensorflow入门指南
2018/02/09 Python
tensorflow 打印内存中的变量方法
2018/07/30 Python
python按时间排序目录下的文件实现方法
2018/10/17 Python
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
澳大利亚和新西兰最大的在线旅行社之一:Aunt Betty
2019/08/07 全球购物
Erwin Müller穆勒家居瑞士官网:您整个家庭的邮购公司
2019/12/28 全球购物
什么是会话Bean
2015/05/14 面试题
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
党的群众路线教育实践活动个人整改方案
2014/09/21 职场文书
公司开业致辞
2015/07/29 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书
Python基础之变量的相关知识总结
2021/06/23 Python
mapstruct的用法之qualifiedByName示例详解
2022/04/06 Java/Android