[转]php和html混编的三种方式

php和html混编的三种方式

以下内容转自:http://blog.i1728.com/post/110.html

原文标题是:《PHP的(<<》,新标题是我加的,文章里的红字也是我标注的;

----------------------------------------------

07月22日 分类: 学习笔记 8条评论 16532 ℃

W3school 上学PHP,看到第一句就是“PHP 文件可包含文本、HTML 标签以及脚本”

在后来的学习别人的代码,发现在需要HTML代码的PHP脚本中,多用这么几种方法

第一种是在HTML中加PHP。大段大段的html代码中,在各个需要执行php的地方<?php .... ?>。这种方法在ASP的程序中比较常见。 
例子:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<title>Hello World</title>
    <style>
        body{font-size:15px;color:#000;font-family:Arial,Helvetica,sans-serif;}
        a{color:#039;text-decoration:none;}
    </style>
</head>
<body>
        </b>
        <?php
            echo "Hello world!这是正文";
        ?>
        <br>
        <a href=# >这是一个超链接</a>
        </b>
    </body>
</html>

第二种用echo输出HTML。但是HTML中有双引号,所用echo输出的内容用单引号括起来,避免出错,也省了转义这一步。

比如这样的代码:

<?php
if(!$_POST)
    {
    echo ‘<form action="" method="post">
            服务器地址:<input type="text" name="host" value="localhost" /><br />
            数据库账号:<input type="text" name="user" value="" /><br />
            数据库密码:<input type="password" name="pwd" value="" /><br />
            指定数据库:<input type="text" name="db" value="test" /><br />
            <input type="submit" value="确定"/>
           </form><hr/>说明:<b>……<br /></b>
         ‘;
    }
?>

不过比较多见的还是加了转义符号的,个人觉得阅读起来不爽

echo "<input type=\"submit\" value=\"确定\"/>"

 

第三种就是用(<<<)标记符了,这是在PHP168的模板代码中首次见到的。 

<<<EOT
EOT;

中间的文档直接输出,一个比较好理解的说法是“一个多行的echo ”。 
优点是输出大段HTML方便,不需要转义,而且可以引用变量。

一个例子:

<?php

    $label1 = "deepblue_mainslide";
    $label2 = "deepblue_mainh1";
    $label3 = "deepblue_maint1";
    $label4 = "deepblue_maint2";
    $rs = array("http://123.abc.com", "abc", "ABC");

    print <<<EOT
        <div class="slidecont">{$label1}</div>
        <div class="newcontainter">
        <div class="head">{$label2}</div>
        <div class="cont" id="Tab1">
            {$label3}
        </div>
        <div class="cont" id="Tab2">
            {$label4}
        </div>
        </div>
        <a href="$rs[0]" title="$rs[1]" target="_blank">$rs[2]</a>
EOT;
?>

在上面的例子干净利索的输出了大段HTML+变量的值,非常棒。 
但是在使用(<<<EOT) 标记符还有一点需要注意:

标识符结束字符串即EOT;要独占一行,前后都不许再有内容。 

PS.注意不但EOT;前面不能有空格,而且<<<EOT后面也不能有任何空格!!!否则不但什么都不会输出,而且还会报错!!!

尤其容易犯的失误就是在标识符前加空格和缩进符,下面的例子什么都不会输出 

<?php
    print <<<EOT[1]
    <a href="http://blog.i1728.com/" title="东方天宇的博客">东方天宇的博客</a>
[2]EOT;[3]
    echo "喂~人家在等你呢!";
?>

我们会发现,[如果三个地方任何一个地方加了空格],会显示以下三种不同的错误提示,最后的echo也没有执行。

    //[1]( ! ) Parse error: syntax error, unexpected ‘<<‘ (T_SL) in D:\MyHTTP\Apache24\htdocs\testPHPmixHTML04.php on line 2
    //[2]( ! ) Parse error: syntax error, unexpected end of file, expecting variable (T_VARIABLE) or heredoc end (T_END_HEREDOC) or ${ (T_DOLLAR_OPEN_CURLY_BRACES) or {$ (T_CURLY_OPEN) in D:\……\testPHPmixHTML04.php on line 14
    //[3]( ! ) Parse error: syntax error, unexpected ‘{‘ in D:\MyHTTP\Apache24\htdocs\testPHPmixHTML04.php on line 8

这是因为(<<<EOT)没有找到标识符结束字符,将echo语句也包含到需要输入的内容了。

同时,因为没有找到标识符结束字符所有的内容都不会输出。 
当然,这只是我的理解,因为即使将echo语句放在print <<<EOT 
前面,脚本也不会有内容内容。 
具体什么原因,就留给大家去讨论了。

时间: 2024-08-12 01:34:32

[转]php和html混编的三种方式的相关文章

python和C语言混编的几种方式

Python这些年风头一直很盛,占据了很多领域的位置,Web.大数据.人工智能.运维均有它的身影,甚至图形界面做的也很顺,乃至full-stack这个词语刚出来的时候,似乎就是为了描述它. Python虽有GIL的问题导致多线程无法充分利用多核,但后来的multiprocess可以从多进程的角度来利用多核,甚至affinity可以绑定具体的CPU核,这个问题也算得到解决.虽基本为全栈语言,但有的时候为了效率,可能还是会去考虑和C语言混编.混编是计算机里一个不可回避的话题,涉及的东西很多,技术.架

OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰)

前文曾具体探讨了关于OpenCV的使用,原本以为天下已太平.但不断有人反应依旧配不好OpenCV4Android,不能得心应手的在Android上使用OpenCV.大量的精力都浪费在摸索配置上.尤其是OpenCVManager诞生之后.更让人无语.大家第一个反应就是怎样才干不安装OpenCVManager.由于要多安装这个东西对客户来说体验太不好了. 咱家昨夜研究至两点,今早七点起床.最终把头绪理清了. 以下咱家以之前做过的一个基于OpenCV2.3.1.android通过jni调用opencv

WiFi攻击的三种方式

WiFi的安全问题已经引起了不少的使用者重视,甚至已经出现草木皆兵的现象.那么黑客到底是如何做到绕过身份验证来获取WiFi使用权的呢?主要有以下三种方式,其中最后一种方式十分简单. WiFi的安全问题已经引起了不少的使用者重视,甚至已经出现草木皆兵的现象.那么黑客到底是如何做到绕过身份验证来获取WiFi使用权的呢?主要有以下三种方式,其中最后一种方式十分简单. 1. 伪造MAC地址 很多时候开放网络的身份验证往往就是通过上网设备的MAC地址连同上网凭证一起实现的.但由于设备的MAC地址都容易进行

三种方式实现观察者模式 及 Spring中的事件编程模型

观察者模式可以说是众多设计模式中,最容易理解的设计模式之一了,观察者模式在Spring中也随处可见,面试的时候,面试官可能会问,嘿,你既然读过Spring源码,那你说说Spring中运用的设计模式吧,你可以自信的告诉他,Spring中的ApplicationListener就运用了观察者模式. 让我们一步一步来,首先我们要知道到底什么是观察者模式,用Java是如何实现的,在这里,我将会用三种方式来实现观察者模式. 什么是观察者模式 在现实生活中,观察者模式处处可见,比如 看新闻,只要新闻开始播放

AngularJs学习——实现数据绑定的三种方式

三种方式: 方式一:<h5>{{msg}}</h5>  此方式在页面刷新的时候会闪现{{}} 方式二:<h5 ng-bind="msg"></h5> 方式三:<h5 ng-clock class="ng-clock">{{msg}}</h5> 示例代码: <!DOCTYPE html> <html lang="en" ng-app="myapp&q

小蚂蚁学习页面静态化(2)——更新生成纯静态化页面的三种方式

更新生成纯静态化页面的三种方式:1.按照时间间隔更新.2.手动更新.3.定时更新(需要系统配合). 1. 按照时间间隔更新. 当用户第一次访问这个页面的时候,程序自动判断,该静态文件是否存在,并且该文件是否还在有效时间内,如果该文件未超出了有效时间,用户访问的是已经生成的静态文件.如果超出了有效时间,用户得到的是动态输出的内容,同时重新生成静态文件.稍微修改一下昨天的代码为例: <?php //首先判断是否有静态文件,并且文件的最新修改时间到现在是否大于20秒 if(is_file('./tex

Linux中设置服务自启动的三种方式

有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务 主要用三种方式进行这一操作: ln -s                       在/etc/rc.d/rc*.d目录中建立/etc/init.d/服务的软链接(*代表0-6七个运行级别之一) chkonfig                命令行运行级别设置 ntsysv                   伪图形运行级别设置 注意:1.这三种方式主要用于以redhat为基础的发行版 2.如果还不知道运行级别是什么,那么最

Linux识别ntfs及挂载的三种方式

NTFS-3G是一个开源软件,支持在Linux操作系统下读写NTFS格式的分区.它能快速且安全的操作Windows XP,Windows Server 2003, Windows 2000 以及WindowsVista文件系统. 1 .环境准备 安装该软件需要依赖于fuse, Centos6.*中应该默认安装过fuse: [[email protected] yum.repos.d]# rpm -q fuse fuse-2.8.3-4.el6.i686 已经安装 如果没有安装可以yum安装或者编

Tomcat热部署的三种方式

热部署是指在你修改项目BUG的时候对JSP或JAVA类进行了修改在不重启WEB服务器前提下能让修改生效.但是对配置文件的修改除外! 1.直接把项目web文件夹放在webapps里. 2.在tomcat\conf\server.xml中的<host></host>内部添加<context/>标签: <Context debug="0" docBase="D:\demo1\web" path="/demo1"