1.为什么php里面能混写html?
PHP 之所以能直接写 HTML 代码,核心原因在于它的设计定位——一种可以嵌入 HTML 的服务器端脚本语言。它的解析器会“忽略”所有不在 标签内的内容,原样输出给浏览器,这就让 PHP 文件天然支持混合编写。三种主流写法
直接嵌入
:在标签外直接写 HTML,标签内写 PHP 逻辑。这是最直观的方式,适合简单页面。echo 输出
:在 PHP 代码块内用echo或print输出 HTML 字符串。适合动态生成少量标签。Heredoc/Nowdoc
:语法包裹大段 HTML,避免引号转义。适合输出复杂模板。为什么这样设计?
PHP 的全称是 “Hypertext Preprocessor”,从名字就能看出它的初衷就是处理超文本(HTML)。在 Web 早期,开发者需要在静态页面中插入动态内容(如用户信息、数据库查询结果),PHP 的混合模式让这一过程变得极其简单,无需额外模板引擎或构建工具。现代开发建议
虽然能混写,但现代项目更推荐前后端分离或使用模板引擎(如 Twig、Blade),把 HTML 和 PHP 逻辑彻底分开,提升可维护性和安全性。<!DOCTYPE html><htmllang="en"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1.0"> <title>表单</title></head><body> <formaction="no2.php"method="get"> <selectname="username"id=""> <optionvalue="admin">管理员</option> <optionvalue="user">普通用户</option> </select> <inputtype="password"name="password"id=""> <inputtype="submit"value="提交"> </form></body></html>
<?php// echo __FILE__;echo $_GET['username'];echo $_GET['password'];?>
<!DOCTYPE html><htmllang="en"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body> <?php $request= $_REQUEST['username']; if($request=='admin'){ echo '管理员'; }else{ echo '普通用户'; } ?> <formaction="#"method="get"> <selectname="username"id=""> <optionvalue="admin">管理员</option> <optionvalue="user">普通用户</option> </select> <inputtype="submit"value="提交"> </form></body></html>
在 PHP 中,foreach 是一种非常常用且便捷的循环结构,专门用于遍历数组和对象。它会自动将数组或对象中的下一个元素赋值给变量,直到遍历完所有元素为止。以下是 foreach 的核心用法和常见场景:1. 基本语法foreach 主要有两种语法格式:仅获取值:foreach($arrayOrObject as $value) { }同时获取键和值:foreach($arrayOrObject as $key => $value) {}
<!DOCTYPE html><htmllang="en"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body> <?php if(isset($_REQUEST['username']) && is_array($_REQUEST['username'])) { $request = $_REQUEST['username']; foreach($request as $value){ echo $value; } } ?> <formaction="#"method="get"> <selectname="username[]"multipleid=""> <optionvalue="admin">管理员</option> <optionvalue="user">普通用户</option> </select> <inputtype="submit"value="提交"> </form></body></html>
加了一个select属性multiple,然后用isset方法和isarray方法,来判断是否存在username数组htmlspecialchars() 是 PHP 中一个非常核心且常用的字符串处理函数。它的主要作用是将某些预定义的字符转换为 HTML 实体(HTML entities)。1. 核心作用与安全性
在 Web 开发中,这个函数的首要作用是防止跨站脚本攻击(XSS)。当需要向网页输出用户提交的数据(如表单内容、留言、用户名等)时,如果直接使用 echo 输出,浏览器会将其中的 HTML 标签当作代码执行。 通过 htmlspecialchars() 处理后,这些特殊字符会被转换为纯文本显示,从而确保恶意代码(如 标签)不会被浏览器解析和执行,极大提升了 Web 应用的安全性。2. 字符转换规则
该函数会将以下 5 个预定义字符转换为对应的 HTML 实体:(单引号) 转换为 '(在 ENT_QUOTES 模式下)3. 语法与参数详解
函数的基本语法为:htmlspecialchars(string, flags, encoding, double_encode):位掩码,用于控制引号的处理方式、无效编码的处理以及文档类型。:规定转换时使用的字符集。自 PHP 5.4.0 起,默认值更改为 UTF-8。为了兼容性,建议在处理中文时显式指定 'UTF-8'。:布尔值。默认为 TRUE(对已存在的 HTML 实体也进行编码)。如果设为 FALSE,则不会对字符串中已经存在的 HTML 实体进行二次编码。4. 代码示例
$str = "John & 'Adams' alert('XSS')";// 1. 默认模式 (ENT_COMPAT):仅转换双引号和 & < >echo htmlspecialchars($str);// 2. ENT_QUOTES 模式:转换单引号和双引号echo htmlspecialchars($str, ENT_QUOTES, 'UTF-8');// 输出: John & 'Adams'alert(&<a class="wx_topic_link" index="ms1uzbni-ou5jku" recommend="">#039</a>;XSS&<a class="wx_topic_link" index="ms1uzbni-2bsg0f" recommend="">#039</a>;)// 3. double_encode 为 FALSE 的情况echo htmlspecialchars($encoded_str, ENT_QUOTES, 'UTF-8', false);// 输出:Bold (不会对已有的 < 进行二次编码变成 <)5. 补充说明
如果只需要处理上述 5 个字符,使用 htmlspecialchars() 即可;如果需要将字符串中所有适用字符都转换为 HTML 实体,应使用 htmlentities() 函数。若需要将转换后的 HTML 实体还原为原始字符,可以使用 htmlspecialchars_decode() 函数。
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><?phpif(isset($_REQUEST['name']) && isset($_REQUEST['password']) && isset($_REQUEST['email']) && isset($_REQUEST['gender'])) { $name = $_REQUEST['name']; $password = $_REQUEST['password']; $email = $_REQUEST['email']; $gender = $_REQUEST['gender']; echo $name; echo $password; echo $email; echo $gender;}?><body> <form action="" method="get"> <input type="text" name="name" placeholder="请输入姓名"> <input type="password" name="password" placeholder="请输入密码"> <input type="email" name="email" placeholder="请输入邮箱"> <input type="radio" name="gender" value="male"> 男 <input type="radio" name="gender" value="female"> 女 <input type="submit" value="提交"> </form></body></html>
以上代码存在xss漏洞,故需要使用htmlspeacialchars()$name = htmlspecialchars($_REQUEST['name']); $password = htmlspecialchars($_REQUEST['password']);
当让用户选择的一些字段中,你要选择用户必填的情况,可以使用empty()函数,判断是否为空<?php$a="";echo empty($a);//返回1?>