跳转到主要内容
你行网

Main navigation

  • 首页
  • Drupal
  • 编程与开发
  • 数据库
  • 操作系统与应用
  • 服务器与运维
  • 社区
User account menu
  • 登录

面包屑

  1. 首页

转义用户输入的特殊字符有哪些函数

由 hrs, 3 三月, 2025

在 PHP 中,为了防止安全漏洞(如 SQL 注入、XSS 攻击等),通常需要对用户输入的特殊字符进行转义。以下是常用的转义函数及其用途:

1. HTML 转义
用于防止 XSS(跨站脚本攻击),将特殊字符转换为 HTML 实体。

函数:htmlspecialchars
作用: 将特殊字符转换为 HTML 实体。

常用字符:

& → &

< → &lt;

> → &gt;

" → &quot;

' → &#039;(如果设置了 ENT_QUOTES 标志)

语法:

php
复制
htmlspecialchars(string $string, int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, string $encoding = "UTF-8", bool $double_encode = true): string
示例:

php
复制
$input = '<script>alert("XSS");</script>';
echo htmlspecialchars($input);
输出:

复制
&lt;script&gt;alert(&quot;XSS&quot;);&lt;/script&gt;
函数:htmlentities
作用: 将所有可转换为 HTML 实体的字符都进行转换(比 htmlspecialchars 更全面)。

示例:

php
复制
$input = '<script>alert("XSS");</script>';
echo htmlentities($input);
输出:

复制
&lt;script&gt;alert(&quot;XSS&quot;);&lt;/script&gt;
2. URL 转义
用于对 URL 中的特殊字符进行编码。

函数:urlencode
作用: 对字符串进行 URL 编码。

常用场景: 用于 GET 请求的参数部分。

示例:

php
复制
$input = 'Hello World!';
echo urlencode($input);
输出:

复制
Hello+World%21
函数:rawurlencode
作用: 对字符串进行 URL 编码(遵循 RFC 3986 标准)。

区别: 空格编码为 %20,而不是 +。

示例:

php
复制
$input = 'Hello World!';
echo rawurlencode($input);
输出:

复制
Hello%20World%21
3. SQL 转义
用于防止 SQL 注入,对数据库查询中的特殊字符进行转义。

函数:mysqli_real_escape_string(MySQLi)
作用: 对字符串中的特殊字符进行转义,以便安全地插入到 SQL 查询中。

语法:

php
复制
mysqli_real_escape_string(mysqli $link, string $string): string
示例:

php
复制
$input = "O'Reilly";
$escaped_input = mysqli_real_escape_string($link, $input);
$sql = "INSERT INTO users (name) VALUES ('$escaped_input')";
函数:PDO::quote(PDO)
作用: 对字符串进行转义并添加引号,以便安全地插入到 SQL 查询中。

示例:

php
复制
$input = "O'Reilly";
$escaped_input = $pdo->quote($input);
$sql = "INSERT INTO users (name) VALUES ($escaped_input)";
4. JavaScript 转义
用于将 PHP 数据安全地嵌入到 JavaScript 中。

函数:json_encode
作用: 将 PHP 数据转换为 JSON 格式,自动处理特殊字符。

示例:

php
复制
$input = ['name' => 'John', 'message' => 'Hello "World"!'];
echo json_encode($input);
输出:

复制
{"name":"John","message":"Hello \"World\"!"}
5. Shell 命令转义
用于防止 命令注入,对 Shell 命令中的特殊字符进行转义。

函数:escapeshellarg
作用: 将字符串转义为安全的 Shell 参数。

示例:

php
复制
$input = 'file; rm -rf /';
$escaped_input = escapeshellarg($input);
echo $escaped_input;
输出:

复制
'file; rm -rf /'
函数:escapeshellcmd
作用: 对 Shell 命令中的特殊字符进行转义。

示例:

php
复制
$input = 'ls; rm -rf /';
$escaped_input = escapeshellcmd($input);
echo $escaped_input;
输出:

复制
ls\; rm -rf /
6. 自定义转义
如果需要更灵活的处理,可以使用正则表达式或字符串替换函数(如 str_replace、preg_replace)进行自定义转义。

总结
场景    函数    用途
HTML 转义    htmlspecialchars    防止 XSS 攻击。
URL 转义    urlencode / rawurlencode    对 URL 参数进行编码。
SQL 转义    mysqli_real_escape_string    防止 SQL 注入。
JavaScript 转义    json_encode    安全嵌入 PHP 数据到 JavaScript。
Shell 转义    escapeshellarg    防止 Shell 命令注入。
在实际开发中,应根据具体场景选择合适的转义函数,并结合预处理语句(如 PDO 预处理)或框架提供的安全机制,确保数据的安全性。

  • 登录或注册以发表评论
  • 35 次浏览
内容类型分类
技术文章
文章归类
编程与开发

文章标签

  • php

评论

最新文章

  • 内容审核通知 content_moderation_notifications 模块简介
  • 调度程序 scheduler 模块简介
  • 工作流当中的草稿,已发布,很好理解,已归档是怎么理解。
  • 你行网 https://www.dwoke.com seo 关键词
  • brew 是什么命令
  • drupal 9 或 drpal 10 国内内容分享模块 Will Nice social share
  • Views Slideshow - Views Vanilla JavaScript Slideshow (VVJS) 简介和安装方法
  • drupal 11 安装statistics 统计模块
  • drupal11 扩展中找不到Statistics模块
  • drupal11 设置中的“总结摘要”和“切边的” 有什么区别

标签云

adsenseAIapacheaptbadblocksbreadcrumbbrewcentoscertbotckeditorcommandcomposercookiecsharpCSScurlC语言DDEVdiffdnsdockerDreamweaverDrupaldrupal 7drupal 8drupal 9drupal10drupal 11drushExcelfirewalldfirmwareflameshotformgimpgitgzipHTMLHTML5httpdhttp验证inputipjavaJavaScriptJavaSrciptkernelKVMLinuxmavenmbstringmod_expires 模块Mysqlnerdtreenetstatnetworknginxnpmpasswordphpphpmyadminphp扩展RFIDRSSselinuxSEOsharesimple_adsensesshsslStatisticssuperfishsurroundtagcloudstitleubuntuuploadprogressvimVPNVUEWireGuardwpsxdebugyoutubeyumzip主题(theme)二进制五笔分类术语压缩解压哈希值声音字段密码工作流快捷键摄影权限果树种植标签优化模块(module)源地址版本号电子秤电脑基础电脑技巧短信验证端口简介算法网站备份网站运营翻译英语表单视图(views)计算机基础赚钱超五类线网线邮件验证重定向重定向,301错误颜色

相关文章

  • php json_encode 函数将编码值转为json格式
  • php 用户自定义回调函数实例
  • php 回调函数实例
  • 因权限问题导致drupal cms 无法正常安装,那么该如何解决这个问题
  • kvm虚拟机启动失败:default网络未激活
  • ubuntu 安装kvm 虚拟机
  • 匿名函数(Anonymous Functions)详解
  • foreach 是 PHP 循环语句使用方法
  • implode() 函数的定义和用法
  • Drupal 11 主题制作教程
RSS源

关于我们

  • 你行网简介
  • 关于我们
  • 版权声明

网站相关

  • 社区论坛
  • 网址导航
  • 网站地图
  • 联系我们

友情链接

  • 英文学习

友情链接2

  • drupal 大学
  • 水滴间
  • 爱码网
  • Apache

友情链接3

  • MySQL
  • php
  • drupalcode

友情链接4

  • Drupal 中国
  • Drupal 老葛
  • 宁浩网
  • drupal 台湾
Copyright © 2019 - 2021 你行网 版权所有  粤ICP备19072650号-1