2009-07-23 14 views
11

我有一塊數據很大,可能會包含引號和雙引號。反向mysql_real_escape_string

我正在使用mysql_real_escape_string()來安全地存儲它。

當我把它拉出來看它時,所有的引號都被轉義了。我嘗試使用str_replace來擺脫所有的引號,但是將\r\n轉換爲rn。 :(

我怎樣才能扭轉這種局面,這樣數據又回到了它去的路上

回答

6

你用魔術引號

注:?如果magic_quotes_gpc的啓用, 首先應用的stripslashes ()到 數據。使用此函數[mysql_real_escape_string]在其上已經躲過將 逃脫數據兩次數據 。

9

誰說的?

$keyword = "TEST'TEST"; 

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

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

逃避串後,您的字符串可以成爲「TEST \ r \ n'TEST「,在這種情況下,nl2br將不起作用。所以我做了這樣的事情: stripslashes(str_replace('\ r \ n','
',nl2br(「TEST \ r \ n \'TEST」))) – 2015-06-20 13:14:16

1

如果你真的想扭轉這種因爲你的數據是如何格式化的,這是我想出了一個解決方案:

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