我的问题似乎微不足道,但我找不到任何好的"解决这个问题。
首先是我听到很多答案的问题,我们何时需要使用mysql_real_escape_string()
解析字符串?我的想法是,只有在将用户给定的数据存储在数据库中时才需要它,这是一个很好的规则吗?
我的第二个问题,这是真正的问题。当我用mysql_real_escape_string()
解析一个字符串时,它会在字符串中的任何有害字符之前放置一个特殊字符\
,例如。如果函数找到'
,则会附加\
,因此结果为\'
。
好吧,没关系,问题是当我从数据库中读取相同的字符串时,我也得到\
字符。有没有什么好办法摆脱\
角色?
我曾经想过的一个想法是使用str_replace("\\","",$string)
,但这是一种安全的好方法吗?
谢谢大家!
答案 0 :(得分:2)
答案 1 :(得分:2)
mysql_real_escape_string()
不会在您的字符串中放置永久\
。它只使用它们 - 直到它完成插入。
字符串中反斜杠的最可能原因是使用addslashes()
,或者在您的环境中默认启用Magic Quotes
。
您可以在任何情况下使用PHP的stripslashes()
删除它们:
$string = stripslashes($string);
mysql_real_escape_string()
的另一个参考是here。
答案 2 :(得分:0)
我m_r_e_s
添加的\
字符实际上并未插入到数据库中。如果您正在检索它,因为magic_quotes_gpc之类的内容已启用,并且您正在自动添加斜杠。
mysql_
函数已被弃用。您的第一个问题是正确的,任何用户输入都应在插入之前正确转义。 PDO和Mysqli允许您使用预准备语句,并提供自己的转义函数。
关于第二个问题,请尝试以下代码:
if (get_magic_quotes_gpc()) {
$value = stripslashes($_POST['value']);
}
这将删除PHP自动添加的任何斜杠。有关Magic Quotes的更多信息。
答案 3 :(得分:-1)
首先,不鼓励使用mysql_real_escape_string。检查magic_quotes是否打开:
echo "Magic quotes is " . (get_magic_quotes_gpc() ? "ON" : "OFF");
或者您可以使用stripslashes