我正在使用php并尝试在mysql数据库中保存一些html内容。 html内容由ckeditor生成。内容是这样的 -
<p><img align="left" alt="" src="images/1im1.jpg" style="margin:1px 15px 0 0; border:1px solid #cecece; " /> <img alt="If syou love hot sauce" src="images/tit_If-you-love-hot-sauce.jpg" /></p><br>D'elidas is a fine<p>
我在php中使用它 -
$main_data = mysql_real_escape_string($_POST['content']);
这在我的localhost(xampp)中运行正常。但不是在网上工作。我的托管是使用最新版本的PHP和MySQL。保存在在线数据库后,我看到这样 -
<p><img align=\"left\" alt=\"\" src=\"images/1im1.jpg\" style=\"margin:1px 15px 0 0; border:1px solid #cecece; \" /> <img alt=\"If syou love hot sauce\" src=\"images/tit_If-you-love-hot-sauce.jpg\" /></p>br>D\'elidas is a fine<p>
这就是HTML在我的页面中无法正确显示的原因。请帮我解决这个问题。这是在引号之前添加斜杠。我想保存确切的html并在前端显示。
答案 0 :(得分:7)
您托管公司可能已开启魔术报价 - http://php.net/manual/en/security.magicquotes.php
您无法在代码中禁用它,但此处的示例2显示了http://www.php.net/manual/en/security.magicquotes.disabling.php
的解决方法答案 1 :(得分:2)
听起来您的主机可能已启用magic_quotes_gpc
,这会自动为来自$ _GET,$ _POST和$ _COOKIE的数据中的引号和双引号添加斜杠。
您可能想要创建一个用于转义GPC数据的包装函数。举个例子......
function mysql_escape_gpc($dirty)
{
if (ini_get('magic_quotes_gpc'))
{
return $dirty;
}
else
{
return mysql_real_escape_string($dirty);
}
}
这样,无论服务器的配置如何,您的代码都是可移植的。
此外,如果您的生产环境支持它,您应该考虑查看准备好的语句。这样您就不必担心转义数据了,但是如果magic_quotes_gpc
已打开,您仍需要对其进行取消隐藏。
答案 2 :(得分:-1)
从数据库中获取它时,需要在HTML字符串上运行stripslashes()。正确?
答案 3 :(得分:-1)
我通过在php和mySQL数据库中使用以下代码段来实现这一点:
存储到数据库中。您必须在实际的mySQL Insertcall中使用以下代码段。我发现如果你首先对变量执行此操作然后将变量放入insert调用中它将无法工作。该函数必须在mySQL语句中
mysql_real_escape_string($myValue)
在值中检索文本框。假设您的值已经从数据库中检索到,现在位于一个名为theValues的数组中。基本上我正在删除任何反斜杠,但在手之前,我确保它可以使用htmlentities正确显示。由于你不是HTML格式的反斜杠,我知道它修复了服务器用\“替换引号的地方。如果你确实在HTML中遇到一些反斜杠,你只需要在替换函数中更聪明一点。
$myValue= str_replace("\\", "", htmlentities($theValues->myValue));
echo $myValue;
回显一个页面与上面相同的原因,但是htmlentities函数使它只显示HTML的文本而不是处理HTML
str_replace("\\", "",$myValue)