-1

我从 html 页面获取输入,然后数据进入 php 页面并存储在变量 $code 中。问题是当我提交时:-

    #include<iostream>
    using namespace std;
    int main( ) {
    cout<<"1";
    }

那么存储在 $code 中的是:-

#include<iostream>
using namespace std;
int main( ) {
cout<<\"1\";          //Notice the change , these backslashes at cout.
}

我怎样才能避免这种情况?我正在使用 000webhost.com 并且这件事不会发生在我的本地主机中。

4

2 回答 2

0

最佳解决方案 在您的 php.ini 文件中,magic_quotes_gpc 指令可能设置为 on。出于安全原因,应禁用此功能。如果您无权访问 php.ini 文件(例如,在共享主机上),您始终可以使用 .htaccess 指令完成相同的操作(假设这是一个 apache 服务器)。

在你的 php.ini

magic_quotes_gpc Off

在 .htaccess 文件中:

php_flag magic_quotes_gpc Off

为什么会这样?

发生这种情况的原因是由于以下逻辑过程。

需要转义的字符串被发送到服务器。这是我的字符串。这很棒。Magic Quotes 在到达您的代码之前转义了撇号。这是我的字符串。太棒了 mysql_real_escape_string 现在有两个字符要转义,反斜杠 \ 以及撇号 \'。这是我的字符串。It\\'s awesome 这个新的超级转义字符串存储在数据库中。当从数据库中检索字符串时,它被传递给 stripslashes。这将删除在步骤 3 中添加的两个转义,但由于其中一个反斜杠已被转义,因此 stripslashes 认为它​​属于。这是我的字符串。太棒了 当您将这些字符串重新提交到数据库时,这个问题真的会失控,因为每次反斜杠的数量都会成倍增加。

替代解决方案 一个快速简单的替代方法是在将字符串传递给 mysql_real_escape_string 之前简单地删除由 magic_quotes 添加的斜线。

$str = stripslashes($code);
$str = mysql_real_escape_string($str);
于 2013-04-01T08:29:36.597 回答
-1

这是因为引号被转义了,所以会发生这种情况:假设您正在存储“苹果”,如果引号没有被转义,就会发生这种情况

$var = ""apple"";

在此工作时导致错误:

$var = "\"apple\"";

如果您打算回显我认为的数据,您可以使用stripslashes();来摆脱正斜杠。

于 2013-04-01T07:52:18.610 回答