php - 为什么当我们使用 htmlentities 对用户的输入数据进行编码以防止跨站点脚本时,html 输出和浏览器输出不同?
问题描述
为了防止跨站点脚本,我正在使用 htmlentities。但我对代码的输出有一点怀疑。它是
$str = "Albert Einstein said: 'E=MC²'";
$enc = htmlenities($str);
使用此代码,我正在对用户的输入数据进行编码。因此变量 $enc 将是
Albert Einstein said: 'E=MC²'<br>
但是当这段代码被渲染并给出输出时,输出将是
Albert Einstein said: 'E=MC²'
我怀疑我们还没有解码 $enc 输出应该显示为
Albert Einstein said: 'E=MC²'<br>
为什么会这样?
解决方案
HTML 中保留了一些字符。
假设我们想用 HTML 写一些东西来显示图像。
然后我们将编写<img src="someimage.jpg" />
,浏览器加载并呈现页面中的图像。
现在考虑我们有一个学习网站,我们想教我们的观众如何在网页中加载图像。那么我们现在应该怎么做呢?
要显示这些保留字符,我们需要使用 HTML 实体,浏览器会为我们处理。
HTML 中的保留字符必须替换为字符实体。
键盘上不存在的字符也可以替换为实体。
您可以在 w3schools - https://www.w3schools.com/html/html_entities.asp中阅读有关它的信息。
推荐阅读
- python-3.x - 如何使用 matplotlib 修复条形图中被覆盖的值?
- python - Python http.client.RemoteDisconnected
- vba - 将工作表名称分配给函数/子参数
- android - 试图将图像保存到画廊
- twitter-bootstrap - 选择输入焦点上的第一个输入组项
- java - 使用自定义接收器的 Spark Streaming 预写日志
- c++ - 需要 noexcept 规范但未实例化时的依赖名称查找示例
- javascript - 图像 src 标记中 angular2 中的动态绑定
- c# - 使用工厂按名称调用方法 - 最佳实践解决方案是什么
- javascript - 如何动态更改 X 轴和 Y 轴的起点?