在我的页面上,当我向服务器输入数据时,它会在“和”之前自动添加反斜杠。 我猜它是因为mysql_real_escape_string,由于某种原因,它只在我的远程服务器上添加了反向串,而在localhost上它没有添加它们。 主要问题是我稍后显示输入的值,它有两个问题: 1.反斜杠使文字难以辨认,对眼睛不舒服。 2.它删除部分数据,因为它限制为140个字符。 我能做些什么来阻止他们? 我的代码:
$city = mysql_real_escape_string($_POST['city']);
//here preaty regular insert query.
在查询之后输入的数据以反斜杠插入到数据库中。 然后在另一页上:
//get data from DB
echo $city;
像这样剥离斜杠:
echo stripslashes($city);
无济于事,因为它没有解决问题#2 任何帮助和想法都将受到批评。
编辑:如果我有如下所述的magic_quotes模式,是否意味着我不必使用mysql_real_escape_string?
答案 0 :(得分:1)
问题是您要转义变量,将其插入数据库,然后显示 转义 变量。
更好的解决方案是......
$city = $_POST['city'];
$query = "INSERT INTO table SET city = '".mysql_real_escape_string($city)."'";
echo htmlspecialchars($city,ENT_QUOTES);
注意强> 的
不推荐使用mysql函数
答案 1 :(得分:1)
如果您无法编辑php.ini
文件以禁用魔术引号,请尝试以下操作......
if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
{
function undo_magic_quotes_gpc(&$array)
{
foreach($array as &$value)
{
if(is_array($value))
{
undo_magic_quotes_gpc($value);
}
else
{
$value = stripslashes($value);
}
}
}
undo_magic_quotes_gpc($_POST);
undo_magic_quotes_gpc($_GET);
undo_magic_quotes_gpc($_COOKIE);
}
我在转义变量之前运行它,但请记住,一旦转义变量(通过mysql_real_escape_string()
),字符限制可能仍会增加。为了帮助解决这个问题,您可以对用户的输入设置字符限制,但是要使后端限制稍微高一些(例如160-170)以考虑插入的字符?
希望有所帮助!