Php,undo mysql_real_escape_string

时间:2015-06-28 00:28:08

标签: php encoding

我真的有理由保留这个功能。 我以前将BINARY内容保存到文件中,该文件由此函数运行,因此内容类似于

WA\0,\0\0\0\0\0\0„Cźw\\\0\0\0\0\0\0\0\0\0\0\0Q\0\0\0

所以不知怎的,我必须扭转这个功能。我尝试了stripslashes()函数,现在它看起来更好了:

WA ,      „Cźw\           Q   

仍然腐败。我甚至试过这个:

$search = array( "\0", "\n", "\r", "\\", "\'", "\\", "\Z" );
$replace = array( "\x00", "\n", "\r", "\"", "'", "\", \x1a" );
$a = str_replace($search, $replace, $a);

仍然没有快乐。如何恢复原始二进制数据?

1 个答案:

答案 0 :(得分:1)

诀窍在于正确转义要替换的序列。以下功能应该有效。

function un_mysql_real_escape_string( $data ) {
    return str_replace(
        array( '\0'  , '\n', '\r', '\Z'  , '\"', '\\\'', '\\\\' ),
        array( "\x00", "\n", "\r", "\x1a", '"' , '\''  , '\\'   ),
        $data
    );
}

我的unescape功能的单元测试。

$data = '';
foreach ( range(0, 255) as $dec ) {
    $data .= chr( $dec );
}

$data_escaped = mysql_real_escape_string( $data );
var_dump( un_mysql_real_escape_string( $data_escaped ) === $data );