我真的有理由保留这个功能。 我以前将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);
仍然没有快乐。如何恢复原始二进制数据?
答案 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 );