为 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.
你描述的逃跑一定发生在其他地方。
我通过基本的 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.
你描述的逃跑一定发生在其他地方。