为什么包含 HTML 实体的字符串在通过 htmlspecialchars() 运行 后不显示字符

Why does a string that contains HTML entity not displaying character after being ran through htmlspecialchars()

我有一串文本,从 SQL 然后 运行 通过 PHP strip_tags 和 htmlspecialchars 提取,因为我需要删除我的用户可能尝试添加的所有 HTML 格式。然后它显示在文本区域以及不可编辑的 div 中。 textarea 显示原始 HTML 实体代码(例如 & <),这就是我想要的。至于 div,它是文本区域内容的预览,我希望它显示实际字符(例如 & <)。因此,我需要 div 将任何特殊字符转换为 html 实体,但我希望当前的 HTML 实体显示为字符。

这串文本可能包含很多不同的字符,因为它是餐厅运行t 设备的技术著作,所以它不仅仅是符号和引号。基本上,有足够的列表不是一个容易的选择。

这是我 运行 文本区域和预览的字符串 div:

function removeTags($data) {
    $data = strip_tags($data);
    $data = htmlspecialchars($data, ENT_HTML5, 'UTF-8');
    return $data;
}

这是文本区域显示的内容:

This unit has the ability to lower food temperature from 160&#176;F to 38&#176;F, with 110 lbs.

不幸的是,预览 div 显示了相同的信息,但我希望预览 div 显示下面的行,同时仍然删除任何 HTML 标签以及转换任何特殊字符至 HTML 个实体:

This unit has the ability to lower food temperature from 160°F to 38°F, with 110 lbs.

htmlspecialchars()函数将某些字符如&转换为它们的HTML实体,如&amp;.

此外,如果您想转换所有字符,而不仅仅是 htmlspecialchars() 转换的字符,请改用 htmlentities()

然后您可以使用 str_replace() 函数来显示 HTML 个实体。

例如:

$data = "This unit has the ability to lower food temperature from 160°F to 38°F, with 110 lbs.";

$data = "This unit has the ability to lower food temperature from 160°F to 38°F, with 110 lbs.";

function removeTags($data) {
    $data = strip_tags($data);
    $data = htmlentities($data);
    return $data;
}

echo '<textarea cols="95" rows="6">' . str_replace('&', '&amp;', removeTags($data)) . '</textarea>';
echo '<div>' . removeTags($data) . '</div>';

在文本区域中,输出为:

This unit has the ability to lower food temperature from 160&deg;F to 38&deg;F, with 110 lbs.

在div中,输出为:

This unit has the ability to lower food temperature from 160°F to 38°F, with 110 lbs.