PHP语言怎样实现页面之间的跳转与传值 PHP语言页面跳转传值的实用操作方法​

php页面跳转最推荐使用header(“location: …”),它通过发送http头实现高效、seo友好的重定向,适用于登录跳转、prg模式等场景;2. 可选meta refresh实现延迟跳转,适合提示页面但不利于seo;3. javascript跳转灵活但依赖客户端支持,适用于交互逻辑判断。数据传递方面:1. get方法通过url传值,简单但不安全,仅适用于非敏感、少量数据;2. post方法通过请求体提交,适合敏感或大量数据,需防csrf;3. session将数据存于服务器,安全性高,适合跨页面保持登录状态;4. cookie存储在客户端,适合偏好设置但易被篡改,需设置httponly和secure标志。安全实践中必须验证过滤所有输入,避免“headers already sent”错误,跳转后加exit终止脚本,登录后调用session_regenerate_id防止会话固定,并优先使用https加密传输。

PHP语言怎样实现页面之间的跳转与传值 PHP语言页面跳转传值的实用操作方法​

PHP语言实现页面之间的跳转与传值,核心在于利用HTTP协议的特性和PHP内置的超级全局变量。简单来说,页面跳转通常通过发送HTTP

Location

头实现,而数据传递则依赖于URL参数(GET)、表单提交(POST)、会话(Session)或Cookie机制。理解这些,你的Web应用就能实现流畅的交互。

解决方案

要让PHP页面动起来,实现跳转并携带数据,我们有几种常用的方法,每种都有其适用场景和考量。

页面跳转:

立即学习“PHP免费学习笔记(深入)”;

最直接、也是我个人最推荐的方式,就是使用PHP的

header()

函数发送HTTP

Location

头。这告诉浏览器:“嘿,别待在这儿了,去这个新地址!”

<?php// 跳转到另一个页面header("Location: target_page.php");// 记住,非常重要!在header()之后立即终止脚本执行// 否则,即使浏览器跳转了,当前脚本的剩余部分也可能继续运行,// 造成不必要的资源消耗甚至安全隐患。exit;?>

数据传递:

数据传递的方式就丰富多了,选择哪种取决于你数据的敏感度、大小以及需要在多少页面间保持。

GET方法(URL参数传递):这是最显而易见的方式,数据直接附加在URL后面,以

?

开始,多个参数用

&

连接。

// 发送数据到 target_page.php$username = "zhangsan";$userId = 123;header("Location: target_page.php?user=" . urlencode($username) . "&id=" . $userId);exit;// 在 target_page.php 中接收数据// 你会发现这些数据都在 $_GET 超级全局数组里$receivedUsername = $_GET['user'] ?? 'Guest'; // 使用 ?? 操作符避免未定义索引警告$receivedUserId = $_GET['id'] ?? 0;echo "欢迎," . htmlspecialchars($receivedUsername) . "!您的ID是:" . htmlspecialchars($receivedUserId);

注意:

urlencode()

是个好习惯,它能确保URL中的特殊字符(比如空格、中文)被正确编码,避免链接失效。同时,接收时用

htmlspecialchars()

输出,防止XSS攻击。

POST方法(表单提交):当数据量较大或包含敏感信息(如密码)时,POST是更好的选择。数据不会显示在URL中,而是随HTTP请求体发送。

        



// process_data.phpif ($_SERVER["REQUEST_METHOD"] == "POST") {    $name = $_POST['user_name'] ?? '';    $email = $_POST['user_email'] ?? '';    echo "收到您的信息:姓名 - " . htmlspecialchars($name) . ", 邮箱 - " . htmlspecialchars($email);} else {    echo "请通过表单提交数据。";}

POST请求通常由HTML表单触发,但也可以通过JavaScript或cURL等方式模拟。

SESSION方法(会话):如果数据需要在多个页面间持久存在,或者需要在用户登录状态下传递,Session是理想选择。数据存储在服务器端,通过一个唯一的Session ID(通常存在Cookie中)与用户关联。

// page1.phpsession_start(); // 必须在任何输出之前调用$_SESSION['user_id'] = 456;$_SESSION['role'] = 'admin';echo "会话数据已设置,即将跳转...";header("Location: page2.php");exit;// page2.phpsession_start(); // 同样必须在任何输出之前调用$userId = $_SESSION['user_id'] ?? '未知';$userRole = $_SESSION['role'] ?? '访客';echo "从会话中获取:用户ID - " . htmlspecialchars($userId) . ", 角色 - " . htmlspecialchars($userRole);// 用完可以销毁特定会话变量// unset($_SESSION['role']);// 或者销毁所有会话数据// session_destroy();

Session的强大在于它能维护用户的“状态”,比如登录信息,跨越多个页面请求。

COOKIE方法:Cookie是存储在用户浏览器端的小块数据。它不如Session安全,因为数据直接暴露在客户端,但对于记住用户偏好、购物车内容等非敏感信息很方便。

// page1.php// 设置一个名为 'language' 的Cookie,值为 'zh-CN',有效期1小时setcookie("language", "zh-CN", time() + 3600, "/"); // 第四个参数 '/' 表示全站可用echo "Cookie已设置,即将跳转...";header("Location: page2.php");exit;// page2.php$userLang = $_COOKIE['language'] ?? 'en';echo "您的语言偏好是:" . htmlspecialchars($userLang);

提示:

setcookie()

必须在任何输出之前调用。

PHP页面跳转的几种常见方式及其适用场景?

除了上面提到的

header("Location: ...")

,其实还有一些其他方式可以实现页面跳转,它们各有优缺点,适用于不同的场景。

1.

header("Location: ...")

(HTTP重定向)这是PHP中最标准、最推荐的服务器端重定向方式。

优点: 效率高,对搜索引擎友好(搜索引擎会跟随301/302重定向),用户浏览器地址栏会显示新URL。它是服务器告诉浏览器“去新地方”的指令。缺点: 无法直接传递POST数据(POST请求会变成GET请求到新页面),必须在任何HTML输出之前调用。适用场景:用户登录成功后跳转到仪表盘。表单提交处理完毕后,防止用户刷新页面导致重复提交(PRG模式:Post-Redirect-Get)。URL结构变更后的永久或临时重定向。权限验证失败后跳转到登录页。

2.


(Meta Refresh)这是一种HTML标签实现的客户端重定向。

优点: 可以在页面已经有部分输出后使用(虽然不推荐),可以设置延迟跳转。缺点: 对SEO不太友好(有时会被视为垃圾内容),用户体验不如即时跳转,浏览器地址栏会先显示旧URL,然后才更新。适用场景:一些简单的提示页面,例如“操作成功,3秒后自动跳转回首页”。早期的网站中,作为一种兼容性方案(现在很少用)。

3. JavaScript

window.location

(客户端JS重定向)通过前端JavaScript代码控制页面跳转。

优点: 灵活,可以在客户端根据用户行为或特定条件进行跳转,可以传递GET参数。缺点: 如果用户禁用了JavaScript,则无法实现跳转;依赖于客户端执行,不如服务器端重定向可靠。适用场景:用户点击某个按钮后,根据前端逻辑判断是否跳转。AJAX请求成功后,根据返回数据决定是否重定向。客户端会话过期,强制跳转到登录页。

我个人在开发中,除非有非常明确的客户端需求,否则几乎总是优先选择

header("Location: ...")

。它更符合Web请求响应的规范,也更利于维护和SEO。Meta Refresh在现代Web开发中已经很少见了,JavaScript跳转则更多是作为用户交互的补充。

PHP中如何安全有效地传递数据?不同传值方式的优缺点与安全考量

数据传递不仅仅是把值从A点送到B点,更重要的是要考虑安全性和效率。每种方法都有其“脾气”和需要注意的地方。

1. GET 方法 (

$_GET

)

优点:简单直观,数据直接在URL中可见,便于调试。URL可收藏(书签),便于分享。适合传递非敏感、少量的数据,如搜索关键词、页码、排序方式。缺点:安全风险: 数据暴露在URL中,容易被用户看到、修改甚至被浏览器历史记录、服务器日志记录。不适合传递密码、个人身份信息等敏感数据长度限制: URL有长度限制(不同浏览器和服务器有差异,通常2048字符左右),不适合传递大量数据。数据类型: 只能传递字符串,复杂数据需要序列化。安全考量:输入验证与过滤: 任何从

$_GET

获取的数据都必须被视为“不信任”的,必须进行严格的验证、过滤和转义,以防范XSS(跨站脚本攻击)、SQL注入等。例如,使用

filter_input(INPUT_GET, 'param', FILTER_SANITIZE_STRING)

htmlspecialchars()

敏感信息: 绝不能通过GET传递敏感信息。

2. POST 方法 (

$_POST

)

优点:安全性相对高: 数据不显示在URL中,而是放在HTTP请求体中,不易被直接查看或篡改(但仍可通过抓包工具获取)。无数据量限制: 可以传递大量数据,适合文件上传、长文本内容。适合提交表单数据,如注册、登录、发布文章。缺点:数据不显示在URL中,不方便收藏或分享特定状态的页面。通常需要通过表单提交,直接访问页面无法获取POST数据。安全考量:输入验证与过滤: 同GET方法,

$_POST

的数据也必须进行严格的验证和过滤。CSRF(跨站请求伪造)防护: 尽管数据不显示在URL中,但恶意网站仍可能伪造POST请求。需要使用CSRF Token机制来防范。HTTPS加密: 如果传递敏感数据,务必使用HTTPS,因为POST数据在HTTP协议下是明文传输的,容易被中间人窃取。

3. SESSION 方法 (

$_SESSION

)

优点:安全性最高: 数据存储在服务器端,客户端只存储一个Session ID(通常在Cookie中),不易被篡改或窃取。跨页面持久化: 数据可以在用户会话期间(通常是浏览器关闭前)在多个页面间保持。适合存储用户登录状态、购物车内容、用户权限等敏感或需要长时间保持的数据。缺点:需要服务器资源来存储会话数据。需要

session_start()

函数在每个使用Session的页面开头调用。如果用户禁用Cookie,Session机制可能失效(虽然PHP提供了URL重写Session ID的备用方案,但不推荐)。安全考量:Session劫持/固定攻击: 攻击者可能窃取或预测Session ID,冒充用户。应在用户登录后立即调用

session_regenerate_id(true)

来生成新的Session ID。Session过期: 合理设置Session过期时间,防止长时间未活动的用户会话被利用。Session数据安全: 确保Session文件存储目录的安全,防止被未授权访问。

4. COOKIE 方法 (

$_COOKIE

)

优点:客户端持久化: 数据存储在用户浏览器端,即使浏览器关闭再打开,数据也可能存在(取决于过期时间)。适合存储用户偏好设置、记住登录状态(非敏感信息)、追踪用户行为等。缺点:安全性最低: 数据直接暴露在客户端,用户可以查看、修改甚至删除Cookie。不适合存储敏感信息。大小限制: 通常每个Cookie大小限制在4KB左右,且每个域名下的Cookie数量也有限制。每次HTTP请求都会携带Cookie,增加网络流量。安全考量:敏感信息: 绝不能通过Cookie存储敏感信息。HttpOnly 标志: 设置Cookie为

HttpOnly

可以防止JavaScript访问Cookie,降低XSS攻击的风险。Secure 标志: 在HTTPS环境下,设置

Secure

标志可以确保Cookie只通过加密连接发送。Domain 和 Path: 精确设置Cookie的作用域,避免不必要的泄露。输入验证与过滤:

$_COOKIE

获取的数据也必须进行严格的验证和过滤。

在我看来,选择哪种方式,真的是要看具体场景。处理用户输入,特别是涉及到持久化或敏感数据时,Session是首选。而如果只是简单的页面间参数传递,GET和POST就足够了,但切记,安全永远是第一位的,任何从客户端来的数据,都不能直接信任。

处理页面跳转和数据传递时常见的陷阱与最佳实践

在PHP的世界里,页面跳转和数据传递看似简单,但实际操作中,新手甚至一些老手都可能踩到一些“坑”。了解这些陷阱并遵循最佳实践,能让你的代码更健壮、更安全。

常见的陷阱:

“Headers already sent” 错误:这是PHP开发中最经典的错误之一。当你尝试使用

header()

函数进行页面跳转时,如果在此之前有任何输出(哪怕是一个空格、一个换行符,或者HTML标签),PHP就会报错。

原因: HTTP头必须在任何实际内容(body)发送之前发送。一旦有内容输出,PHP就会认为HTTP头已经发送完毕。如何避免: 确保

header()

函数调用之前,没有任何

echo

print

、HTML代码,甚至PHP结束标签

?>

后面的空白字符。一个常见的做法是,把所有

header()

相关的逻辑放在脚本的最顶部。

缺少

exit;

die();

header("Location: ...")

之后,如果没有紧跟着

exit;

die();

来终止脚本执行,那么即使浏览器收到了跳转指令并开始跳转,服务器端的PHP脚本仍会继续执行剩余的代码。这可能导致:

资源浪费: 执行了不必要的数据库查询、文件操作等。安全漏洞: 敏感操作可能在用户以为已经跳转的情况下被执行,或者在用户未授权的情况下生成了不该生成的内容。逻辑混乱: 导致意外的副作用。最佳实践: 永远在

header("Location: ...")

之后立即使用

exit;

die();

不进行输入验证和过滤:无论是从

$_GET

$_POST

$_SESSION

还是

$_COOKIE

获取的数据,都不能直接使用或输出。它们都来自用户或客户端,是不可信的。

风险: SQL注入、XSS(跨站脚本攻击)、恶意文件上传、会话劫持等。如何避免:对所有用户输入进行验证(检查数据类型、格式、长度、范围等)。对所有用户输入进行过滤/清理(移除或转义潜在的恶意字符)。在将数据插入数据库时使用预处理语句(Prepared Statements)。在将数据输出到HTML页面时使用

htmlspecialchars()

htmlentities()

会话(Session)管理不当:Session虽然安全,但如果使用不当,也可能成为攻击目标。

风险: Session固定攻击(攻击者在用户登录前设置一个Session ID,然后诱导用户登录,从而劫持该会话)、Session劫持(通过窃取Session ID来冒充用户)。如何避免:登录后立即

session_regenerate_id(true)

这能有效防止Session固定攻击。设置合理的Session过期时间:

session.gc_maxlifetime

session.cookie_lifetime

使用安全的Cookie参数:

session_set_cookie_params()

设置

HttpOnly

Secure

标志。

HttpOnly

防止JavaScript访问Session Cookie,

Secure

确保Cookie只在HTTPS下发送。

未考虑PRG(Post/Redirect/Get)模式:当用户提交表单(POST请求)后,如果直接显示结果页面,用户刷新浏览器可能会导致表单重复提交。

解决方案: 采用PRG模式。即:Post (提交表单) -> Redirect (服务器处理完数据后,使用

header("Location: ...")

重定向到一个新的GET请求页面) -> Get (显示结果页面)。优点: 避免重复提交,允许用户刷新结果页面,结果页面可以被收藏。

最佳实践:

始终使用HTTPS: 这是最基础也是最重要的安全措施。所有数据(GET、POST、Cookie、Session ID)在传输过程中都会被加密,大大降低了数据被窃听的风险。明确数据流向: 在设计系统时,清晰地规划数据在不同页面、不同组件之间的传递方式,并选择最适合且安全的方法。**统一

以上就是PHP语言怎样实现页面之间的跳转与传值 PHP语言页面跳转传值的实用操作方法​的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1290526.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
PHP如何实现邮件发送功能 PHP邮件系统的配置与使用
上一篇 2025年12月11日 06:42:29
修复 Laravel 更新接口:无法更新用户信息的解决方案
下一篇 2025年12月11日 06:42:43

相关推荐

  • composer require-dev和require有什么不同_Composer Require与Require-Dev区别解析

    require用于声明项目运行必需的依赖,如框架、数据库组件和第三方SDK,这些包会随项目部署到生产环境;2. require-dev用于声明仅在开发和测试阶段需要的工具,如PHPUnit、PHPStan、Faker等,不会默认部署到生产环境;3. 安装时composer install根据环境决定…

    2026年5月10日
    1000
  • 修复Django电商项目中AJAX过滤产品列表图片不显示问题

    在Django电商项目中,当使用AJAX动态加载过滤后的产品列表时,常遇到图片无法正常显示的问题。这通常是由于前端模板中图片加载方式(如data-setbg属性结合JavaScript库)与AJAX动态内容更新机制不兼容所致。解决方案是直接在AJAX返回的HTML中使用标准的标签来渲染图片,确保浏览…

    2026年5月10日
    000
  • 开源免费PHP工具 PHP开发效率提升利器

    推荐开源免费PHP开发工具以提升效率:VS Code、Sublime Text轻量高效,PhpStorm专业强大;调试用Xdebug、Kint、Ray;依赖管理选Composer;代码质量工具包括PHPStan、Psalm、PHP_CodeSniffer;数据库管理可用%ignore_a_1%MyA…

    2026年5月10日
    000
  • Matplotlib 地图中多类型图例的创建与优化

    Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化

    本教程旨在解决matplotlib地图可视化中,如何在一个图例中同时展示颜色块(如区域分类)和自定义标记(如特定兴趣点)的问题。文章详细介绍了当传统`patch`对象无法正确显示标记时,如何利用`matplotlib.lines.line2d`创建标记图例句柄,并将其与颜色块图例句柄合并,从而生成一…

    2026年5月10日 用户投稿
    300
  • Golang JSON序列化:控制敏感字段暴露的最佳实践

    本教程探讨golang中如何高效控制结构体字段在json序列化时的可见性。当需要将包含敏感信息的结构体数组转换为json响应时,通过利用`encoding/json`包提供的结构体标签,特别是`json:”-“`,可以轻松实现对特定字段的忽略,从而避免敏感数据泄露,确保api…

    2026年5月10日
    000
  • 利用海象运算符简化条件赋值:Python教程与最佳实践

    本文旨在探讨Python中海象运算符(:=)在条件赋值场景下的应用。通过对比传统if/else语句与海象运算符,以及条件表达式,分析海象运算符在简化代码、提高可读性方面的优势与局限性。并通过具体示例,展示如何在列表推导式等场景下合理使用海象运算符,同时强调其潜在的复杂性及替代方案,帮助开发者更好地掌…

    2026年5月10日
    100
  • Debian syslog性能优化技巧有哪些

    提升Debian系统syslog (通常基于rsyslog)性能,关键在于精简配置和高效处理日志。以下策略能有效优化日志管理,提升系统整体性能: 精简配置,高效加载: 在rsyslog配置文件中,仅加载必要的输入、输出和解析模块。 使用全局指令设置日志级别和格式,避免不必要的处理。 自定义模板: 创…

    2026年5月10日
    000
  • 怎么在PHP代码中实现图片上传功能_PHP图片上传功能实现与安全处理教程

    首先创建含enctype的HTML表单,再用PHP接收文件,检查目录、移动临时文件,验证类型与大小,生成唯一文件名,并调整php.ini限制以确保上传成功。 如果您尝试在PHP项目中添加图片上传功能,但服务器无法正确接收或保存文件,则可能是由于表单配置、文件处理逻辑或安全限制的问题。以下是实现该功能…

    2026年5月10日
    300
  • 获取日期中的周数:CodeIgniter 教程

    本教程旨在帮助开发者在 CodeIgniter 框架中,从日期字符串中准确提取周数。我们将使用 PHP 内置的 DateTime 类,并提供详细的代码示例和注意事项,确保您能够轻松地在项目中实现此功能。 使用 DateTime 类获取周数 PHP 的 DateTime 类提供了一种便捷的方式来处理日…

    2026年5月10日
    100
  • 比特币新手教程 比特币交易平台有哪些

    比特币是一种去中心化的数字货币,基于区块链技术实现点对点交易,具有匿名性、有限发行和不可篡改等特点;新手可通过交易所购买,P2P交易获得比特币,常用平台包括Binance、OKX和Huobi;交易流程包括注册账户、实名认证、绑定支付方式、充值法币并下单购买,可选择市价单或限价单;比特币存储方式有交易…

    2026年5月10日
    000
  • c++中的SFINAE技术是什么_c++模板编程中的SFINAE原理与应用

    SFINAE 是“替换失败不是错误”的原则,指模板实例化时若参数替换导致错误,只要存在其他合法候选,编译器不报错而是继续重载决议。它用于条件启用模板、类型检测等场景,如通过 decltype 或 enable_if 控制函数重载,实现类型特征判断。尽管 C++20 引入 Concepts 简化了部分…

    2026年5月10日
    000
  • Go语言mgo查询构建:深入理解bson.M与日期范围查询的正确实践

    本文旨在解决go语言mgo库中构建复杂查询时,特别是涉及嵌套`bson.m`和日期范围筛选的常见错误。我们将深入剖析`bson.m`的类型特性,解释为何直接索引`interface{}`会导致“invalid operation”错误,并提供一种推荐的、结构清晰的代码重构方案,以确保查询条件能够正确…

    2026年5月10日
    100
  • vscode上怎么运行html_vscode上运行html步骤【指南】

    首先保存文件为.html格式,再通过浏览器或Live Server插件打开预览;推荐安装Live Server实现本地服务器运行与实时刷新,提升开发体验。 在 VS Code 上运行 HTML 文件并不需要复杂的配置,只需几个简单步骤即可预览页面效果。VS Code 本身是一个代码编辑器,不直接运行…

    2026年5月10日
    100
  • RichHandler与Rich Progress集成:解决显示冲突的教程

    在使用rich库的`richhandler`进行日志输出并同时使用`progress`组件时,可能会遇到显示错乱或溢出问题。这通常是由于为`richhandler`和`progress`分别创建了独立的`console`实例导致的。解决方案是确保日志处理器和进度条组件共享同一个`console`实例…

    2026年5月10日
    000
  • 修复点击时按钮抖动:CSS垂直对齐实践

    本文探讨了在Web开发中,交互式按钮(如播放/暂停按钮)在点击时发生意外垂直位移的问题。通过分析CSS样式变化对元素布局的影响,我们发现这是由于按钮不同状态下的边框样式和内边距改变,以及默认的垂直对齐行为共同作用所致。核心解决方案是利用CSS的vertical-align属性,将其设置为middle…

    2026年5月10日
    100
  • Golang goroutine与channel调试技巧

    使用go run -race检测数据竞争,结合runtime.NumGoroutine监控协程数量,通过pprof分析阻塞调用栈,利用select超时避免永久阻塞,有效排查goroutine泄漏、死锁和数据竞争问题。 Go语言的goroutine和channel是并发编程的核心,但它们也带来了调试上…

    2026年5月10日
    000
  • 使用 Jupyter Notebook 进行探索性数据分析

    Jupyter Notebook通过单元格实现代码与Markdown结合,支持数据导入(pandas)、清洗(fillna)、探索(matplotlib/seaborn可视化)、统计分析(describe/corr)和特征工程,便于记录与分享分析过程。 Jupyter Notebook 是进行探索性…

    2026年5月10日
    000
  • 《魔兽世界》将于6月11日开启国服回归技术测试

    《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试

    《%ign%ignore_a_1%re_a_1%》官方宣布,将于6月11日开启国服回归技术测试,时间为7天,并称可以在6月内正式开服,玩家们可以访问官网下载战网客户端并预下载“巫妖王之怒”客户端,技术测试详情见下图。 WordAi WordAI是一个AI驱动的内容重写平台 53 查看详情 以上就是《…

    2026年5月10日 用户投稿
    200
  • php常量怎么用_PHP常量(define/const)定义与使用方法

    PHP中可通过define函数和const关键字定义常量,用于存储不可变值。define适用于全局作用域,支持动态名称和条件定义,如define(‘SITE_NAME’, ‘MyWebsite’);const在编译时生效,语法简洁但限制多,只能在类或全…

    2026年5月10日
    000
  • 如何在HTML中插入表单元素_HTML表单控件与输入类型使用指南

    HTML表单通过标签构建,包含action和method属性定义数据提交目标与方式,常用input类型如text、password、email等适配不同输入需求,配合label、required、placeholder提升可用性,结合textarea、select、button等控件实现完整交互,是…

    2026年5月10日
    100

发表回复

登录后才能评论
关注微信