当前位置:首页>php>php基础知识5

php基础知识5

  • 2026-09-05 00:42:01
php基础知识5

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'];?>
表单联动2:
<!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>
foreach的两种语法格式:
在 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()知识详解:
htmlspecialchars() 是 PHP 中一个非常核心且常用的字符串处理函数。它的主要作用是将某些预定义的字符转换为 HTML 实体(HTML entities)。

1. 核心作用与安全性

在 Web 开发中,这个函数的首要作用是防止跨站脚本攻击(XSS)。当需要向网页输出用户提交的数据(如表单内容、留言、用户名等)时,如果直接使用 echo 输出,浏览器会将其中的 HTML 标签当作代码执行。 通过 htmlspecialchars() 处理后,这些特殊字符会被转换为纯文本显示,从而确保恶意代码(如  标签)不会被浏览器解析和执行,极大提升了 Web 应用的安全性。

2. 字符转换规则

该函数会将以下 5 个预定义字符转换为对应的 HTML 实体:
&
(和号) 转换为 &
"
(双引号) 转换为 "
'
(单引号) 转换为 &#039;(在 ENT_QUOTES 模式下)
<
(小于) 转换为 <
>
(大于) 转换为 >

3. 语法与参数详解

函数的基本语法为:htmlspecialchars(string, flags, encoding, double_encode)
string(必需)
:待转换的字符串。
flags(可选)
:位掩码,用于控制引号的处理方式、无效编码的处理以及文档类型。
encoding(可选)
:规定转换时使用的字符集。自 PHP 5.4.0 起,默认值更改为 UTF-8。为了兼容性,建议在处理中文时显式指定 'UTF-8'。
double_encode(可选)
:布尔值。默认为 TRUE(对已存在的 HTML 实体也进行编码)。如果设为 FALSE,则不会对字符串中已经存在的 HTML 实体进行二次编码。

4. 代码示例

$str = "John & 'Adams' alert('XSS')";
// 1. 默认模式 (ENT_COMPAT):仅转换双引号和 & < >
echo htmlspecialchars($str);
// 输出: John & 'Adams'
alert('XSS')
// 2. ENT_QUOTES 模式:转换单引号和双引号
echo htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
// 输出: John & &#039;Adams&#039;
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 的情况
$encoded_str = "Bold";
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?>

最新文章

随机文章