摆脱mysql_real_escape_string()解析字符串上的\字符

时间:2012-08-14 19:08:55

标签: php mysql database

我的问题似乎微不足道,但我找不到任何好的"解决这个问题。

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

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

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

谢谢大家!

4 个答案:

答案 0 :(得分:2)

您可以使用stripslashes()

例如:

<?php
    $text = "Test\'ing my app";
    echo stripslashes($text);
?>

答案 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之类的内容已启用,并且您正在自动添加斜杠。

也就是说,您应该切换到PDOMysqli,因为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