什么情况下可以不写PHP的闭合标签“?>”
在一些PHP项目里我们经常会看到有些PHP文件中的代码是只有开始标签,而没有结束标签的,那么什么情况下可以不写这个结束标签,而什么情况下又必须写?
对此我们先来看2个例子:
下面的代码可以正常运行:
<?php echo 123456;
下面的代码会报错:
<?php echo 123456; <p>abc</p>
原因分析:
前者是纯php代码,可以不写结束标签,也不推荐写结束标签;后者除了php代码,还有html代码,必须要写结束标签。
那么为什么不推荐前者写结束标签呢?
因为在不写php结束标签时,默认从开始标签往后都是php代码,如果有其他代码,那就会报错。php只能运行在php标签里面的脚本,在脚本之外的所有字符,包括你看不见的空格或者回车,制表符号,都是作为输出内容会response到客户端的,这样就有可能会产生意想不到的事情。例如文件里面使用了header函数,这个文件同时又包含了另外一个文件,并且被包含的文件的php标签外有空字符,这个时候会报header already send的错误。我们查看一些网页的源代码看到的开头部分有很多空格和换行,就是因为这个原因导致的。
解决方案建议:
库文件、或者一些class文件等只有纯php代码的文件不推荐加结束标签。
相信本文所述对大家的PHP程序设计有一定的参考价值。
相关推荐
-
php实现html标签闭合检测与修复方法
本文实例讲述了php实现html标签闭合检测与修复方法.分享给大家供大家参考.具体如下: html标签闭合检测与修复,说的有点大 , 并没有考虑的很完整,没有使用正则表达式, 适用于html文件中只有开始标签没有结束标签, 是有结束标签没有开始标签的情况.标签闭合的位置需要根据需求调整 <?php $str = ' <div data="<li></li>"> <img src="http://www.baidu.com/123
-
php使HTML标签自动补全闭合函数代码
简单解释一些代码: 第一个 ~(<[^>]+?>)~si 这个正则是匹配<--->中的内容.简单说是所有的<标签>. 第二个 ~<([a-z0-9]+)[^/>]*?/>~si 这个正则是匹配<--/>中的内容.是单闭合标签 如<br /> 第三个 ~</([a-z0-9]+)[^/>]*?>~si 这个正则是匹配</......>中的内容.也就是结束标签 如</a> 第四个 ~&
-
php截取html字符串及自动补全html标签的方法
本文实例讲述了php截取html字符串及自动补全html标签的方法.分享给大家供大家参考.具体分析如下: 这里总结一下关于利用php截取html字符串自动补全html标签,实际开发中会经常碰到,很多人直接先strip_tags过滤掉html标签,但是就只剩下纯文本了,可读性非常差,下面是一个函数,代码如下: 复制代码 代码如下: /** * 截取HTML,并自动补全闭合 * @param $html * @param $length * @param $end */ function
-
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
fixHtmlTag version 0.2 这个版本解决了上次遗留的问题,即就近闭合和嵌套闭合问题.具体可以看代码的注释. 复制代码 代码如下: <?php /** * fixHtmlTag * * HTML标签修复函数,此函数可以修复未正确闭合的 HTML 标签 * * 由于不确定性因素太多,暂时提供两种模式"嵌套闭合模式"和 * "就近闭合模式",应该够用了. * * 这两种模式是我为了解释清楚此函数的实现而创造的两个名词, * 只需明白什么意思就行.
-
PHP实现HTML标签自动补全代码
一般情况下先用PHP的 strip_tags 函数去掉所有html标签,再去掉空格等,然后再用substr或者自己实现的cn_substr函数来实现截取.因为如果不先去掉html标签,直接截取出来的字符串就会有没有闭合的标签出现,有时甚至会截取在标签上面比如 复制代码 代码如下: </di ... 今天遇到一个内容翻页截取问题: 正文是用富文本编辑器写入的,编辑器上有个分页按钮,点击之后就往当前光标位置插入一个蓝色的 复制代码 代码如下: <hr /> 横线.然后php直接存入数据库.显
-
php不写闭合标签的好处
最早这个概念是从Drupal中接触到的,一开始有点不习惯--为什么不写闭合标签呢?这感觉很不完美啊,对于有强迫症的人来说很不适应嘛!后来,在工作中碰到了因为标签闭合而引起的问题,才开始不写闭合标签.参阅了一些文章,对PHP闭合标签的总结如下:好处:如果这个是一个被别人包含的程序,没有这个结束符,可以减少很多很多问题,比如说:header, setcookie, session_start这些动作之前不能有输出,如果不小心在?> 后边加了不可见字符(多余的空格.换行符)等破坏页面显示,就会报"
-
PHP实现过滤各种HTML标签
首先分享一些比较常见的 $str=preg_replace("/<s*imgs+[^>]*?srcs*=s*('|")(.*?)\1[^>]*?/?s*>/i","", $str); //过滤img标签 $str=preg_replace("/s+/","", $str); //过滤多余回车 $str=preg_replace("/<[ ]+/si","&l
-
什么情况下可以不写PHP的闭合标签“?>”
在一些PHP项目里我们经常会看到有些PHP文件中的代码是只有开始标签,而没有结束标签的,那么什么情况下可以不写这个结束标签,而什么情况下又必须写? 对此我们先来看2个例子: 下面的代码可以正常运行: <?php echo 123456; 下面的代码会报错: <?php echo 123456; <p>abc</p> 原因分析: 前者是纯php代码,可以不写结束标签,也不推荐写结束标签:后者除了php代码,还有html代码,必须要写结束标签. 那么为什么不推荐前者写结
-
jQuery针对input的class属性写了多个值情况下的选择方法
本文实例讲述了jQuery针对input的class属性写了多个值情况下的选择方法.分享给大家供大家参考,具体如下: jQuery选择input的class属性写了多个值的情况: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script src="jquery-1.6.2.js" ty
-
oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
最近做项目遇到一个挺纠结的问题,由于业务的关系,DB的数据表无法确定,在使用过程中字段可能会增加,这样在insert时给我造成了很大的困扰. 先来看一下最终我是怎么实现的: <insert id="batchInsertLine" parameterType="HashMap"> <![CDATA[ INSERT INTO tg_fcst_lines(${lineColumn}) select result.*,sq_fcst_lines.next
-
python-opencv在有噪音的情况下提取图像的轮廓实例
对于一般的图像提取轮廓,介绍了一个很好的方法,但是对于有噪声的图像,并不能很好地捕获到目标物体. 比如对于我的鼠标,提取的轮廓效果并不好,因为噪声很多: 所以本文增加了去掉噪声的部分. 首先加载原始图像,并显示图像 img = cv2.imread("temp.jpg") #载入图像 h, w = img.shape[:2] #获取图像的高和宽 cv2.imshow("Origin", img) 然后进行低通滤波处理,进行降噪 blured = cv2.blur(i
-
J2ee 高并发情况下监听器实例详解
J2ee 高并发情况下监听器实例详解 引言:在高并发下限制最大并发次数,在web.xml中用过滤器设置参数(最大并发数),并设置其他相关参数.详细见代码. 第一步:配置web.xml配置,不懂的地方解释一下:参数50通过参数名maxConcurrent用在filter的实现类中获取,filter-class就是写的实现类, url-pattern就是限制并发时间的url,结束! <filter> <filter-name>ConcurrentCountFilter</filt
-
Android在不使用数据库的情况下存储数据的方法
本文实例讲述了Android在不使用数据库的情况下存储数据的方法.分享给大家供大家参考.具体分析如下: 在有些情况下我们不需要构建数据库,但是却要将一些数据保存起来,等到程序下次运行时调用,那么我们如何做呢? 1. 引用命名空间 import android.content.SharedPreferences; 2. 定义一个新类PictureGlobalDef,用来存储数据,在该类中定义: public final static String APPSetting = "SettingFile
-
数据库高并发情况下重复值写入的避免 字段组合约束
10线程同时操作,频繁出现插入同样数据的问题.虽然在插入数据的时候使用了: insert inti tablename(fields....) select @t1,@t2,@t3 from tablename where not exists (select id from tablename where t1=@t1,t2=@t2,t3=@t3) 当时还是在高并发的情况下无效.此语句也包含在存储过程中.(之前也尝试线判断有无记录再看是否写入,无效). 因此,对于此类情况还是需要从数据库的根本
-
Yii+MYSQL锁表防止并发情况下重复数据的方法
本文实例讲述了Yii+MYSQL锁表防止并发情况下重复数据的方法.分享给大家供大家参考,具体如下: lock table 读锁定 如果一个线程获得在一个表上的read锁,那么该线程和所有其他线程只能从表中读数据,不能进行任何写操作. lock tables user read;//读锁定表 unlock tables;//解锁 lock tables user read local;//本地读锁定表,其他线程的insert未被阻塞,update操作被阻塞 lock table 写锁定 如果一个线
-
分析在Python中何种情况下需要使用断言
这个问题是如何在一些场景下使用断言表达式,通常会有人误用它,所以我决定写一篇文章来说明何时使用断言,什么时候不用. 为那些还不清楚它的人,Python的assert是用来检查一个条件,如果它为真,就不做任何事.如果它为假,则会抛出AssertError并且包含错误信息.例如: py> x = 23 py> assert x > 0, "x is not zero or negative" py> assert x%2 == 0, "x is not a
随机推荐
- 用正则表达式格式化html标签的代码
- 经典黑客远程攻击过程概要
- JQuery入门——用one()方法绑定事件处理函数(仅触发一次)
- angularjs+bootstrap实现自定义分页的实例代码
- Jquery Validate 正则表达式实用验证代码大全
- .NET实现定时发送邮件代码(两种方式)
- 浅谈js中几种实用的跨域方法原理详解
- asp.net的cms 核心代码篇
- PHP实现HTTP断点续传的方法
- 详解nodejs 文本操作模块-fs模块(三)
- JS实现的适合做faq或menu滑动效果示例
- php自定义apk安装包实例
- ajax上传时参数提交不更新等相关问题
- 动态生成的IFRAME,设置SRC时的,不同位置带来的影响
- Powershell小技巧之等待输入一个按键
- Android StickListView实现悬停效果
- 浅谈关于指针作为参数并改变它的值的问题
- C# DataTable分页处理实例代码
- Android开发 -- setTag的妙用和The key must be an application-specific resource id 异常
- C#实现图片加相框的方法