我从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中没有发生。
答案 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();
去除正斜杠。