反转mysql_real_escape_string

时间:2009-07-23 11:25:42

标签: php mysql

我有一个很大的数据,可能包含引号和双引号。

我正在使用mysql_real_escape_string()安全地存储它。

当我把它拉出来查看时,所有引号都被转义。我尝试使用str_replace来删除所有引号,但这会将\r\n转换为rn。 :(

如何将其反转以使数据以其进入的方式退回?

3 个答案:

答案 0 :(得分:9)

谁说?

$keyword = "TEST'TEST";

$result1 = mysql_real_escape_string($keyword);
echo $result1 --> TEST\'TEST

$result2 = nl2br(stripslashes($result));
echo $result2 --> TEST'TEST

答案 1 :(得分:6)

你使用魔法引号吗?

  

注意:如果启用了magic_quotes_gpc,   首先将stripslashes()应用于   数据。在数据上使用此函数[mysql_real_escape_string]   已经逃脱的将会   两次逃避数据。

答案 2 :(得分:1)

如果您因为格式化数据而实际想要改变这种情况,那么这就是我提出的解决方案:

function mysql_unreal_escape_string($string) {
    $characters = array('x00', 'n', 'r', '\\', '\'', '"','x1a');
    $o_chars = array("\x00", "\n", "\r", "\\", "'", "\"", "\x1a");
    for ($i = 0; $i < strlen($string); $i++) {
        if (substr($string, $i, 1) == '\\') {
            foreach ($characters as $index => $char) {
                if ($i <= strlen($string) - strlen($char) && substr($string, $i + 1, strlen($char)) == $char) {
                    $string = substr_replace($string, $o_chars[$index], $i, strlen($char) + 1);
                    break;
                }
            }
        }
    }
    return $string;
}