提交数据转义
框架内置获取方法一般会对数据进行转义:
htmlspecialchars
用于将特殊字符转换为 HTML 实体,以防止 HTML 注入攻击。这个函数特别有用在处理用户输入的数据时,通过将特殊字符转换成它们的对应 HTML 实体,可以防止恶意用户在页面中插入或执行 HTML 或 JavaScript 代码,从而增强网站的安全性。
语法:
htmlspecialchars(string $string, int $flags = ENT_COMPAT | ENT_HTML401, string $encoding = ‘UTF-8’, bool $double_encode = true): string
$string:要转换的字符串。
$flags:指定转换的模式,常用的选项有:
- ENT_COMPAT:默认。仅转换双引号。
- ENT_QUOTES:同时转换双引号和单引号。
- ENT_NOQUOTES:不转换任何引号。
- 其他选项可用于控制更详细的行为,如处理文档类型等。
$encoding:指定字符编码。默认是 UTF-8。
$double_encode:如果为 false,则不会编码已经被编码的实体。
<?php
$string = “Hello, <b>world</b> & welcome to ‘my site’ \”example.com\””;
$escaped_string = htmlspecialchars($string, ENT_QUOTES, ‘UTF-8’);
echo $escaped_string;
?>
输出:
Hello, <b>world</b> & welcome to 'my site' "example.com"
在这个示例中:
< 被转换为 <
> 被转换为 >
& 被转换为 &
单引号 ‘ 被转换为 '
双引号 ” 被转换为 "
htmlspecialchars_decode
将转义字符还原为HTML标签
检查HTML实体是否被转义
在数据库管理工具(如phpMyAdmin)中执行上述查询,查看content字段的内容。如果内容中包含如<、>、&等符号,说明HTML实体被转义了。
正确处理umeditor等编辑器数据
方法1:使用$_POST获取内容
$post[‘content’] = $_POST[‘content’];
展示内容:
<?php echo htmlspecialchars_decode($content); ?>
方法2:多次转码
//数据中存在 <, >, & 实体,解码成 html 标签
$content = html_entity_decode($content, ENT_QUOTES, ‘UTF-8’);
//再次对其中的特殊字符进行解码,从而得到了最终的 HTML 格式的内容。
$content = htmlspecialchars_decode($content);
<?php echo ($content); ?>
最终是以该方法解决的,执行一次转换无法实现