首页 > 解决方案 > 为什么当我们使用 htmlentities 对用户的输入数据进行编码以防止跨站点脚本时,html 输出和浏览器输出不同?

问题描述

为了防止跨站点脚本,我正在使用 htmlentities。但我对代码的输出有一点怀疑。它是

$str = "Albert Einstein said: 'E=MC²'";
$enc = htmlenities($str);

使用此代码,我正在对用户的输入数据进行编码。因此变量 $enc 将是

Albert Einstein said: 'E=MC&sup2;'<br>

但是当这段代码被渲染并给出输出时,输出将是

Albert Einstein said: 'E=MC²'

我怀疑我们还没有解码 $enc 输出应该显示为

Albert Einstein said: 'E=MC&sup2;'<br>

为什么会这样?

标签: phpxss

解决方案


HTML 中保留了一些字符。

假设我们想用 HTML 写一些东西来显示图像。

然后我们将编写<img src="someimage.jpg" />,浏览器加载并呈现页面中的图像。

现在考虑我们有一个学习网站,我们想教我们的观众如何在网页中加载图像。那么我们现在应该怎么做呢?

要显示这些保留字符,我们需要使用 HTML 实体,浏览器会为我们处理。

HTML 中的保留字符必须替换为字符实体。

键盘上不存在的字符也可以替换为实体。

您可以在 w3schools - https://www.w3schools.com/html/html_entities.asp中阅读有关它的信息。


推荐阅读