为MySQL转义HTML,同时保留有效的HTML结构


Escaping HTML for MySQL whilst retaining valid HTML structure

我通过一个基本的HTML编辑器输入了用户内容。我需要验证该内容并将其安全地插入MySQL数据库,而不更改其格式。

假设我的用户内容是:

$usercontent = "<p>This is my content</p>";

如果我使用:

mysql_real_escape_string($usercontent);

我把这个插入到数据库中:

%3Cp%3EThis+is+my+content%3C%2Fp%3E

但是我想要插入文字HTML:

<p>This is my content</p>

是否有一种简单的方法可以将mysql_real_escape_string修改后的内容转换回正常的HTML?

我应该让它知道,我正在修改一个已经写好的web应用程序,我没有被支付重写整个事情-这是一个快速调试我正在做。因此,我确实需要这样做——我确实需要在数据库中存储正常的HTML,只是确保在这样做之前我已经尽可能地进行了验证。这也排除了通过整个应用程序实现PDO作为一个选项。

我做了一些调查,但我找不到这个问题的答案。至少不明确……关于这个主题的所有内容似乎都包含在讲座中。假设我读过这些讲座有没有一个简单的答案来解决这个问题?

编辑

原来我的奇怪编码发生在其他地方,而不是由mysql_real_escape_string引起的。这使得我的问题在我的情况下非常独特,可能对任何人都没有多大帮助。然而,urldecode确实解决了我的问题。

使用urldecode获取合适的HTML

假设我的用户内容是:

$usercontent = "<p>This is my content</p>";

如果我使用:

mysql_real_escape_string($usercontent);

我把这个插入到数据库中:

%3Cp%3EThis+is+my+content%3C%2Fp%3E

真的吗?你不应该。如手册所述:

mysql_real_escape_string()调用MySQL的库函数mysql_real_escape_string,该函数在以下字符前加上反斜杠:'x00'n'r''"'x1a

您所描述的转义必须发生在其他地方