在php中存储字符串

时间:2013-04-01 07:47:29

标签: php c++ string

我从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&amp;这件事在我的localhost中没有发生。

2 个答案:

答案 0 :(得分: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现在有两个要转义的字符,反斜杠\以及撇号\'。 这是我的字符串。这很棒 这个新的超级转义字符串存储在数据库中。 从数据库中检索字符串时,它会被传递给stripslashes。这将删除在步骤3中添加的两个转义符,但由于其中一个反斜杠已被转义,因此striplashes认为它属于。 这是我的字符串。这很棒 当您将这些字符串重新提交到数据库时,每次反斜杠的数量都会增加时,这个问题就会失控。

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

$str = stripslashes($code);
$str = mysql_real_escape_string($str);

答案 1 :(得分:-1)

因为引号被转义所以这个剂量发生了: 假设您正在存储&#34; apple&#34; 如果引号未被转义,则会发生这种情况

$var = ""apple"";

在此过程中导致错误:

$var = "\"apple\"";

如果您打算回复我认为的数据,您可以使用stripslashes();去除正斜杠。