8

我知道这听起来很常见而且微不足道,但是,我在这里遇到了挑战。我有一个带有 Zend/Doctrine 的网站,我使用 ckeditor 进行后端管理。上传网站后,我意识到在编辑测试期间网站的外观和感觉搞砸了。

在萤火虫的帮助下,我看到整个 html 上都有斜线。内联版后,外观恢复正常。有这么多文件,我想不出在从mysql输出数据之前做其他解码。

我有什么选择来解决这个问题。网站已经上线了,我对此感到有点不自在。谁能给个提示?谢谢

4

5 回答 5

9

可能是magic_quotes_gpc。你能验证它是否已关闭?

这是一种关闭它的方法:http: //php.net/manual/en/security.magicquotes.disabling.php

为 GPC(Get/Post/Cookie)操作设置 magic_quotes 状态。当 magic_quotes 打开时,所有 '(单引号)、"(双引号)、\(反斜杠)和 NUL 都会自动使用反斜杠进行转义。

另外,您是否使用准备好的语句?PHP PDO/MySQL我会自动为你转义。取决于您使用的查询类型。

于 2012-06-20T01:17:59.823 回答
5

似乎您的数据在插入数据库之前被双重转义。您是在使用mysql_real_escape_string还是addslashes在将数据插入数据库之前?如果是这样,也许您想在插入数据之前使用stripslashes,如下所示:

mysql_real_escape_string(stripslashes($data));

否则,您从数据库中取出数据后,理论上可以调用 stripslashes:

stripslashes($data);

不过,第二种方法不太理想。最好将数据正确存储在数据库中。

于 2012-06-20T01:27:07.417 回答
4

我感谢每一个人的帮助。真正被接受的解决方案应该是来自@Stanislav Palatnik 的解决方案。只是它不适用于我的.htaccess。托管服务器非常好,可以在我的 public_html 中放置一个 php.ini,让我可以更改它。所以 +1 @Stanislav Palatnik 因为他指出了这个问题。我还发现了有趣的信息,我想我会分享,以防有人发现自己处于我的境地。

info from: http://support.godaddy.com/groups/web-hosting/forum/topic/how-to-turn-off-magic_quotes_gpc/
Yes – the solution below worked for me:

(1) First of all do not try to turn off the magic quotes in your .htaccess file, it won’t work on godaddy.
(2) Second, if you’re running PHP5 on your account, rename your php.ini file to php5.ini, make sure it’s in your root folder.
(3) Third, make sure all the lines in your php5.ini file end in a semi colon ;
(4) Fourth, add this line to your php5.ini file:
magic_quotes_gpc = Off;

在同一页面上,有人说它不应该只是 magic_quotes_gpc,还有其他的,如下所示:

magic_quotes_gpc = Off;
magic_quotes_runtime = Off;
magic_quotes_sybase = Off;

希望这对某人有所帮助。特别感谢@Stanislav Palatnik

于 2012-06-21T09:27:33.333 回答
2

如果这是一个魔术引号问题,并且我记得您只能访问您的 application.ini,您可以添加以下内容并尝试一下

phpSettings.magic_quotes_gpc = 0
phpSettings.magic_quotes_runtime = 0

这仍然需要允许您的用户/用户组更改默认的 php 设置;)

于 2012-06-20T05:11:03.260 回答
0
  <?php
     if (get_magic_quotes_gpc()) {
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process)) {
    foreach ($val as $k => $v) {
        unset($process[$key][$k]);
        if (is_array($v)) {
            $process[$key][stripslashes($k)] = $v;
            $process[] = &$process[$key][stripslashes($k)];
        } else {
            $process[$key][stripslashes($k)] = stripslashes($v);
        }
    }
}
unset($process);}
 ?>

将此添加到具有插入/更新查询的 php 页面:)

于 2015-06-13T07:11:45.627 回答