解析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 相关文章推荐
PHPlet在Windows下的安装
Oct 09 PHP
简单易用的计数器(数据库)
Oct 09 PHP
PHP syntax error, unexpected $end 错误的一种原因及解决
Oct 25 PHP
php下使用SimpleXML 处理XML 文件
Feb 27 PHP
PHP批量上传图片的具体实现方法介绍.
Feb 26 PHP
php实现的通用图片处理类
Mar 24 PHP
ThinkPHP数据操作方法总结
Sep 28 PHP
使用php实现从身份证中提取生日
May 09 PHP
Discuz论坛密码与密保加密规则
Dec 19 PHP
php curl常用的5个经典例子
Jan 20 PHP
老生常谈PHP面向对象之标识映射
Jun 21 PHP
php微信开发之图片回复功能
Jun 14 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.vs.JAVA
2016/04/29 PHP
js 蒙版进度条(结合图片)
2010/03/10 Javascript
JS中eval函数的使用示例
2013/07/21 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
js操作滚动条事件实例
2015/01/29 Javascript
javascript中返回顶部按钮的实现
2015/05/05 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
form表单转Json提交的方法(推荐)
2016/09/23 Javascript
三种方式实现瀑布流布局
2017/02/10 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
vue 项目中使用Loading组件的示例代码
2018/08/31 Javascript
学习使用ExpressJS 4.0中的新Router的用法
2018/11/06 Javascript
在vue项目中使用sass语法问题
2019/07/18 Javascript
react native 仿微信聊天室实例代码
2019/09/17 Javascript
JavaScript工具库MyTools详解
2020/01/01 Javascript
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
easy_install python包安装管理工具介绍
2013/02/10 Python
python黑魔法之参数传递
2016/02/12 Python
Pycharm学习教程(2) 代码风格
2017/05/02 Python
python批量修改文件编码格式的方法
2018/05/31 Python
Python循环结构的应用场景详解
2019/07/11 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
Python3爬虫里关于代理的设置总结
2020/07/30 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
美体小铺奥地利官方网站:The Body Shop奥地利
2019/04/11 全球购物
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
如何用PHP实现邮件发送
2012/12/26 面试题
地球上的星星观后感
2015/06/02 职场文书
地道战观后感300字
2015/06/04 职场文书
商业计划书如何写?关键问题有哪些?
2019/07/11 职场文书
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技