解析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 相关文章推荐
MVC模式的PHP实现
Oct 09 PHP
也谈php网站在线人数统计
Apr 09 PHP
一步一步学习PHP(2)――PHP类型
Feb 15 PHP
用PHP的超级变量$_GET获取HTML表单(Form) 数据
May 07 PHP
PHP获取文件绝对路径的代码(上一级目录)
May 29 PHP
PHP中extract()函数的妙用分析
Jul 11 PHP
解析thinkphp基本配置 convention.php
Jun 18 PHP
php面向对象中static静态属性与方法的内存位置分析
Feb 08 PHP
PHP实现的带超时功能get_headers函数
Feb 10 PHP
PHP运行模式汇总
Nov 06 PHP
php判断文件上传图片格式的实例详解
Sep 30 PHP
详细分析PHP 命名空间(namespace)
Jun 30 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四舍五入精确小数位及取整
2014/01/14 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
2014/06/21 PHP
PHP对象相互引用的内存溢出实例分析
2014/08/28 PHP
php获取远程文件内容的函数
2015/11/02 PHP
PHP获取数组中指定的一列实例
2017/12/27 PHP
PHP+ajax实现获取新闻数据简单示例
2018/05/08 PHP
Laravel使用Queue队列的技巧汇总
2019/09/02 PHP
看了就知道什么是JSON
2007/12/09 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
基于jquery实现的鼠标滑过按钮改变背景图片
2011/07/15 Javascript
jquery click([data],fn)使用方法实例介绍
2013/07/08 Javascript
简单的js表单验证函数
2013/10/28 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
微信小程序 教程之条件渲染
2016/10/18 Javascript
利用JS实现简单的日期选择插件
2017/01/23 Javascript
获取url中用&amp;隔开的参数实例(分享)
2017/05/28 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
基于jquery ajax的多文件上传进度条过程解析
2019/09/11 jQuery
Django使用AJAX调用自己写的API接口的方法
2019/03/06 Python
序列化Python对象的方法
2020/08/01 Python
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
详解h5页面在不同ios设备上的问题总结
2019/03/01 HTML / CSS
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
Dillard’s百货官网:Dillards.com
2018/05/26 全球购物
北京捷通华声语音技术有限公司Java软件工程师笔试题
2012/04/10 面试题
网站编辑求职信
2013/10/17 职场文书
幼儿运动会邀请函
2014/01/17 职场文书
个人党性剖析材料
2014/02/03 职场文书
厂长岗位职责
2014/02/19 职场文书
大学新闻系应届生求职信
2014/06/02 职场文书
检讨书格式
2015/01/23 职场文书
辛德勒的名单观后感
2015/06/03 职场文书
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS