为 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

Say my user content is:

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

If I use:

mysql_real_escape_string($usercontent);

I get this inserted into the database:

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

真的吗?你不应该。如 manual 中所述:

mysql_real_escape_string() calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a.

你描述的逃跑一定发生在其他地方。