我正在使用PHP向我的MySQL数据库提交一个表单。
我通过mysql_real_escape_string($content)函数发送表单数据。
当条目出现在我的数据库中(签入phpMyAdmin)时,我所有的双引号和单引号都会转义。
我很确定这是一个PHP配置问题?
所以:
$content = 'Hi, my name is Jascha and my "favorite" thing to do is sleep';
mysql_real_escape_string($content);
$query = 'INSERT INTO DB...'在我的数据库里是这样的:
嗨,我叫Jascha,我最喜欢做的事就是睡觉
我该告诉谁该做什么?(我无法访问php.ini)。
发布于 2010-02-18 04:35:31
在检索请求数据时,需要考虑魔术引号。如果get_magic_quotes_gpc()为true,则需要对输入运行stripslashes()。最好的方法是为此编写一个函数。类似于:
function get_string($array, $index, $default = null) {
if (isset($array[$index]) && strlen($value = trim($array[$index])) > 0) {
return get_magic_quotes_gpc() ? stripslashes($value) : $value;
} else {
return $default;
}
}您可以将..which用作
$input = get_string($_POST, 'input');..instead of
$input = $_POST['input'];对get_number()、get_boolean()、get_array()等琐碎的东西做同样的事情。
发布于 2010-02-18 04:30:55
如果您是从表单(而不是PHP代码中的“原样”)获取$content数据,可能是因为有魔术引号(请参阅)。
基本上:
当magic_quotes为on时,所有
'(单引号)、"(双引号)、\(反斜杠)和NUL都会自动用反斜杠转义
如果启用了魔术引号(例如,您可以在的输出中检查这一点),您将得到那种“双重转义”:
这些字符将通过魔术引号和
在这种情况下,好的解决方案不是停止使用mysql_real_escape_string,而是在您的配置中禁用magic_quotes_gpc ...
..。但是,由于您无法访问它,因此在开始使用它之前,您实际上必须“还原”魔术引号的效果,在获得的输入上调用$_GET和$_POST作为stripslashes。
注意:这是mysql_real_escape_string (报价)手册页上提供的建议:
注意:如果启用了
magic_quotes_gpc,请先对数据应用stripslashes()。对已经转义的数据使用此函数将对数据进行两次转义。
发布于 2010-07-16 13:43:43
我知道现在有点晚了,但作为php的新手,我需要一些非常简单的东西。所以我使用下面的代码来修复magic_quotes_gpc中OP描述的问题。我有一台运行PHP5.2.8的服务器,一台运行5.3的服务器
我的web应用程序正在使用datatables.net显示信息。当数据在数据库中使用转义的特殊字符保存时,我开始收到JSON错误。
我的开发机器使用5.3,但在php 5.2.8中,我需要使用stripslashes函数来将值保存到我的数据库中。
$description = mysql_real_escape_string($description);
// hack for php 5.2.8 //
if (get_magic_quotes_gpc()) {
$description = stripslashes($description);
//echo "description: $description";
}我意识到这基本上和上面的答案是一样的,但对我来说这似乎更符合我的风格。希望这对其他与我同病相助的人有所帮助……
https://stackoverflow.com/questions/2284099
复制相似问题