2015-06-28 114 views
0

我真的有理由保留这个功能。 我以前保存的二进制内容到文件,这是由该功能运行,所以内容是一样的东西Php,undo mysql_real_escape_string

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); 

还是没有喜乐。如何恢复原始的二进制数据?

+2

为什么要在二进制数据中首先执行字符串转义函数? – David

+0

这是我的错。数据用于数据库,所以这一切都很好,但我们改变了主意并将数据存入磁盘。可悲的是,我们意外地离开了逃跑,所以数据变得腐败......所以我不想要它! –

+1

这可能有助于:http://stackoverflow.com/a/10845827/4311336 – Bsienn

回答

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);