0

htmlspecialchars 在我的页面中无法在 pdo 对象放置的转义撇号之前删除反斜杠。我假设这是因为我在页面上使用 UTF-8 来显示汉字。我正在尝试显示一个英文段落和一个中文段落。这是我正在使用的代码:

$english=htmlspecialchars($row["english"], ENT_QUOTES, 'UTF-8');

由于某种原因,它总是显示如下:

Don\'t

没有删除转义字符...

4

3 回答 3

4
  1. PDO 对象不为'.
  2. htmlspecialchars()不要剥离斜杠
  3. 在 HTML 中显示时对单引号进行转义实际上是不正确的,只有双引号是特殊符号。

所以,这里是常见的 XY 问题示例(我可以向学生展示这个问题吗?)

要了解出了什么问题,您需要知道接下来的事情:

  1. 如果启用了magic_quotes , PHP 可以添加\到输入参数- 您需要关闭它们(通过 php.ini 或在php < 5.3 的运行时期间。还要关闭magic_quotes_sybase
  2. 在将数据插入数据库期间,您(有时)需要转义单引号。如果您正确使用它们,这通常由 PDO 函数完成。如果您使用的是bindParam,则不需要使用任何其他转义。
  3. 在从数据库中获取数据期间,您可能会遇到magic_quotes_runtime问题,因此请关闭它们。
  4. 最后,您将数据输出到 HTML —— 这里您需要使用htmlspecialchars()但没有任何属性,因为默认属性是可以的。

如果您有 1 或 2 个问题 - 数据库中的数据可能已经损坏,因此您需要重新保存它们,而不要错误添加\- 为此您可以使用stripslashes(),但只能重新保存一次数据。在您的系统正常工作期间,您需要使用适当的方法。

于 2013-11-01T21:26:59.147 回答
2

这首先不应该发生。可能存在更上游的错误(例如,当数据插入数据库时​​)应该修复,而不是治疗症状。

于 2013-11-01T21:22:23.257 回答
0

用这个替换你的变量:

$english = stripslashes(htmlspecialchars($row["english"], ENT_QUOTES, 'UTF-8'));

stripslashes 部分将摆脱斜线,但它可能会取消对字符串的消毒。

于 2013-11-01T21:19:18.743 回答