2009-07-23 43 views
11

Tôi có một mẩu dữ liệu lớn và có thể chứa dấu ngoặc kép và dấu ngoặc kép.đảo ngược mysql_real_escape_string

Tôi đang sử dụng mysql_real_escape_string() để lưu trữ an toàn.

Khi tôi kéo nó ra để nhìn vào nó, tất cả các dấu ngoặc kép được thoát. Tôi đã thử sử dụng str_replace để loại bỏ tất cả các dấu ngoặc kép, nhưng điều đó biến thành rn của \r\n. :(

Làm thế nào tôi có thể đảo ngược nó để các dữ liệu trở lại ra cách nó đã đi trong

Trả lời

6

Bạn có sử dụng dấu ngoặc kép diệu

Lưu ý:? Nếu magic_quotes_gpc được kích hoạt, đầu tiên áp dụng stripslashes() để dữ liệu . Sử dụng chức năng này [mysql_real_escape_string] trên dữ liệu mà đã được thoát sẽ thoát dữ liệu hai lần.

9

Ai nói?

$keyword = "TEST'TEST"; 

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

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

Sau khi thoát khỏi chuỗi, chuỗi của bạn có thể trở thành "TEST \ r \ n \ 'KIỂM TRA ", trong trường hợp đó nl2br sẽ không hoạt động. Vì vậy, tôi đã làm một cái gì đó như thế này: stripslashes (str_replace ('\ r \ n', '
', nl2br ("KIỂM TRA \ r \ n \ 'KIỂM TRA"))) –

1

Nếu bạn thực sự muốn thay đổi điều đó vì như thế nào dữ liệu của bạn được định dạng, đây là một giải pháp tôi đến với:

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