Htmlspecialchars ENT_NOQUOTES 不工作?

Htmlspecialchars ENT_NOQUOTES not working?

我正在尝试在表单中输出项目名称,即 "David's Project",如果用户未在表单中正确输入所有数据,则用户不必再次输入名称。

如果我 var_dump $name 我看到 David 的项目。但是,如果我回显 $name,我会看到 David"'" Project。我意识到 '(单引号)变成了“'”;但我尝试使用 ENT_NOQUOTES 和 ENT_COMPAT 来避免对单引号进行编码,但都不起作用。

$name = trim(filter_input(INPUT_POST, 'name0', FILTER_SANITIZE_STRING));

<form method="post" class="form" />
Title: <input type="text" name="name0" value="<?php echo 
htmlspecialchars($name, ENT_NOQUOTES); ?>">

我是不是做错了什么或者 ENT_NOQUOTES 应该起作用?我尝试使用 str_replace 将 ' 替换为 \' 但这也不起作用。

我发现的唯一解决方法是使用这个:

htmlspecialchars_decode(htmlspecialchars($name, ENT_NOQUOTES));

可以接受吗?

抱歉,我意识到这可能是一个非常愚蠢的问题,但我无法理解它。

感谢任何回复。

如果简单的答案能解决您的问题,您可以接受,但您应该真正了解,您所深入研究的问题是您或某人为您制造的一个更大的问题。

  1. 数据库不应包含 HTML 编码字符,除非它们专门用于存储 HTML。我非常怀疑这种情况,因为这种情况很少见。
  2. 有人正在将 HTML 插入您的数据库(html 对插入数据进行编码)。这意味着如果您想要使用不基于 HTML 的移动应用程序、命令行或任何可能使用数据但不基于 HTML 的应用程序,您将运行 变成了一个奇怪的问题,其中必须在输出时删除 HTML 编码的字符。这通常是一种倒退的方式,通常会导致问题。
  3. 您很少需要 "sanitize" 您的输入。如果有的话,您应该拒绝不允许的输入,或者在将其插入数据库时​​以正确的方式将其转义。消毒只是在非常特殊的情况下才要做的事情,而你现在似乎还没有。您只是简单地输入和输出文本。
  4. 你几乎不应该改变 用户输入

我的建议是,如果可能的话,首先修复您的 INSERT 代码,这样它就不会 html 编码数据。当您将数据输出为 HTML 格式时,应该会发生这种 html 编码。您将使用 htmlspecialchars() 来执行此操作。