2015-06-28 77 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);