0

我的问题似乎微不足道,但我没有找到任何“好的”解决方案。

首先是一个我听过很多答案的问题,我们什么时候需要用 ? 解析字符串mysql_real_escape_string()?我的想法是只有在将用户给定的数据存储在数据库中时才需要,这是一个很好的规则吗?

我的第二个问题,这是真正的问题。当我用 解析字符串时,它会在字符串中的任何有害字符之前mysql_real_escape_string()放置一个特殊字符,例如。\如果函数找到 a'那么它将附加 a\所以结果是\'.

好吧,没关系,问题是当我从数据库中读取相同的字符串时,我也得到了\字符。有没有什么好办法摆脱\性格?我的一个想法是使用str_replace("\\","",$string),但这是一种很好且安全的方法吗?

谢谢你们!

4

4 回答 4

2

你可以使用stripslashes()

例如:

<?php
    $text = "Test\'ing my app";
    echo stripslashes($text);
?>
于 2012-08-14T19:13:55.853 回答
2

mysql_real_escape_string()不会\在您的字符串中放置永久。它只使用它们 - 直到它完成插入。

字符串中反斜杠的最可能原因是使用addslashes(), 或者如果Magic Quotes在您的环境中默认启用。

stripslashes()在任何情况下,您都可以使用 PHP 删除它们:

$string = stripslashes($string);


另一个参考mysql_real_escape_string()here

于 2012-08-14T19:14:03.937 回答
0

添加的\字符m_r_e_s实际上并没有插入到数据库中。如果您在检索时得到这些,是因为启用了诸如magic_quotes_gpc 之类的东西,并且您会自动添加斜杠。

也就是说,您应该真正切换到PDOMysqli,因为这些mysql_功能已被弃用。

您的第一个问题是正确的,任何用户输入都应该在插入之前正确转义。PDO 和 Mysqli 允许您使用准备好的语句,并且还提供了它们自己的转义函数。

关于您的第二个问题,请尝试以下代码:

if (get_magic_quotes_gpc()) {
    $value = stripslashes($_POST['value']);
}

这将删除 PHP 自动添加的任何斜线。有关魔术行情的更多信息。

于 2012-08-14T19:15:49.540 回答
-1

首先,不鼓励使用 mysql_real_escape_string。检查magic_quotes是否开启:

echo "Magic quotes is " . (get_magic_quotes_gpc() ? "ON" : "OFF");

或者你可以使用stripslashes

于 2012-08-14T19:16:43.133 回答