如何解决使用 htmlspecialchars() 在 PHP 中回显干净的文本
我有一个用户表单,让用户可以在文本区域中输入文本并稍后更改文本。
这是我的 HTML 文本区域示例:
<textarea class="form-control" rows="4" name="answer_text" type="text">
<?PHP echo strip_tags(nl2br(htmlspecialchars($answers['answer_text']))); ?>
</textarea>
为了避免回声中的 <br>
,我使用:strip_tags()
要显示换行符,我使用:nl2br()
出于安全原因,我使用 htmlspecialchars()
但是,如果用户在他的文本中使用引号(" 或 ""),我会在文本回显中得到 "
。我可以通过删除 htmlspecialchars()
来解决这个问题,但我认为这很重要在这里使用它。有没有机会得到正确的输出意味着显示的是引号而不是 "
?
编辑:
我使用了两次 htmlspecialchars()
。在通过 $_POST = htmlspecialchars($value)
获取用户输入值以将其发送到表格期间一次,在 HTML 回显期间作为第二次,如上所示。
正如@Cbroe 所解释的,问题的发生是因为数据被编码了两次。最初它 " 变成了 "first - 然后,在第二次编码期间,它的 & 变成了 &
。
正确的方法是在我的情况下,我在 sql htmlspecialchars()
或 INSERT
期间不使用 UPDATE
(我使用 PDO 准备好的语句)并且只在期间使用 htmlspecialchars()
视情况而定的 HTML 回显。
解决方法
尝试使用 htmlentities() 而不是 htmlspecialchars()。 像这样:
<textarea class="form-control" rows="4" name="answer_text" type="text">
<?php echo strip_tags(nl2br(htmlentities($answers['answer_text']))); ?>
</textarea>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。