【问题标题】:Echo clean text in PHP with htmlspecialchars()使用 htmlspecialchars() 在 PHP 中回显干净的文本
【发布时间】:2021-02-24 09:36:20
【问题描述】:

我有一个用户表单,我让用户可以在文本区域中输入文本并稍后更改文本。

这是我的 HTML 文本区域示例:

<textarea class="form-control" rows="4" name="answer_text" type="text">
<?php echo strip_tags(nl2br(htmlspecialchars($answers['answer_text']))); ?>
</textarea>
  • 文本输入:"This is text"
  • 文本输出(回显):&amp;quot;This is text&amp;quot;.
  • 所需/预期输出:"This is text"

为了避免&lt;br&gt; 在我使用的回声中:strip_tags() 要显示换行符,我使用:nl2br() 出于安全原因,我使用htmlspecialchars()

但是,如果用户在他的文本中使用引号(“或”),我会在我的文本回显中得到&amp;quot;。我可以通过删除htmlspecialchars() 来解决这个问题,但我认为在这里使用它很重要。有没有机会得到正确的输出意味着显示的引号而不是&amp;quot;

编辑:
我使用了两次htmlspecialchars()。一次是在通过$_POST = htmlspecialchars($value) 获取用户输入值以将其发送到表中,第二次是在 HTML 回显期间,如上所示。

正如@Cbroe 所解释的,问题的发生是因为数据被编码了两次。初始它 " 首先变成了 &quote;然后,在第二次编码期间,那个 & 变成了 &amp;amp;

在我的情况下,正确的方法是在 SQL INSERTUPDATE 期间不使用 htmlspecialchars()(我正在使用 PDO 准备好的语句),并且根据情况在 HTML 回显期间仅使用 htmlspecialchars()

【问题讨论】:

  • 为什么你认为你需要 htmlspecialchars ?
  • 可能是我误解了该功能,但需要避免用户将一些代码带入我的数据库(SQL 注入)。文本是使用 PHP PDO Query 插入的。
  • 您也可以改为通过 PDO 准备数据
  • 当然,使用 htmlspecialchars 是有道理的,当您实际创建 HTML 输出时 - 您正在执行的代码中显示的代码。想象一下会发生什么,如果我在这个表单中输入的 textfoobar &lt;/textarea&gt; baz,那么如果你 not 应用任何表单,那么生成的 HTML 代码会是什么样子逃跑?
  • 不,这不是“好”,这完全是错误的方式。在数据库插入部分使用它一开始就是错误的。

标签: php html textarea echo htmlspecialchars


【解决方案1】:

尝试使用 htmlentities() 而不是 htmlspecialchars()。 像这样:

<textarea class="form-control" rows="4" name="answer_text" type="text">
<?php echo strip_tags(nl2br(htmlentities($answers['answer_text']))); ?>
</textarea>

【讨论】:

  • 嘿,很好的答案。尝试留下带有代码的示例以便更好地理解。
猜你喜欢
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多