为什么 PHP 在 strip_tags 中将 <<(双小于)视为标签?



我有一个问题,PHP 在使用strip_tags时将<<视为标签。我有一些文本,我正在剥离格式,然后将内容保存到文件中。如果我只有一个<那么它不会剥离它。

我使用strip_tags的原因是我显示了一个带有一些 HTML 格式(颜色(的网页,然后我希望输出与用户在网页上可以看到的文件相同的输出 - 但没有颜色等的 HTML 标签。

这里的目的是从我的文本中删除所有已知/有效的 HTML 标签,其余的保持不变。这不是防止恶意代码显示在网页上的安全措施。

我的PHP代码是:

$txt = "this is << line 2 > but it does not work";
$fline = strip_tags($txt);
$fh = fopen("file.txt","w");
fwrite($fh,$fline);
fclose($fh);

如果我有这个输入,只有一个<那么文件中的输出将与输入文本完全相同,这也符合预期:

this is < line 1 > and it works

但是当我有这个输入文本时:

this is << line 2 > but it does not work

.. 然后我文件中的输出将剥离虚构标签中的<<和内容:

this is  but it does not work

为什么 PHP 将<<视为标签(但不是<(,以及我如何允许<<,因为它不起作用:

$fline = strip_tags($txt,"<<");

您很可能会回答">但是您为什么首先使用strip_tags" - 我这样做是因为它到目前为止一直对我有用;-(如果这无法修复,我可能需要重写它背后的逻辑,但至少我有一个解释,为什么<<被视为一个标签,而<不是。

尝试将<<>>替换为 HTML 实体,然后strip_tags()会省略它们,但浏览器会将它们显示为<<>>

相关内容

最新更新