2010-10-25 144 views
1

因此,當我將數據保存到數據庫時,PHP將在單引號或雙引號上添加\。那很好。如何在Javascript中刪除斜線(json)?任何JQuery插件?

但是,當數據傳回到客戶端使用json_encode();像麥當勞這樣的文本在數據庫中存儲爲麥當勞,但是一旦從PHP返回到js,它將被編碼爲麥當勞

因爲我使用jQuery,有沒有任何插件可以輕鬆做到這一點?或者我應該用什麼函數來正確地去掉斜槓?顯然,如果有像\\\\s這樣的情況,函數應該返回\s。 :)

對不起。我想我讓我的問題太複雜了。怎麼樣我使其更簡單...

如果我有一個JavaScript變量:

var abc = "McDonald\'s"; 
var bcd = "I need a slash \\ "; 
var cde = "save the double quote \""; 

我怎麼能剝去\」?我應該使用哪種正則表達式?

+1

我有點擔心了很多這裏的答案。我的PHP安全知識有點過時,所以我沒有真正有資格在這裏給出一個好的答案,但是如果你關閉了魔術引號,用一個更好的**轉義系統替換它是非常重要的。你的目標應該是防止SQL注入和跨站腳本攻擊。我通常會使用'mysql_real_escape_string($ user_input)'進入數據庫,'htmlentities($ db_output)'使用客戶端 - 但這可能不會100%安全。希望有人能提供更好的建議。 – Andrew 2010-10-25 02:09:31

+1

你在JS中使用什麼來解析JSON?無論你使用何種方法,如果它正確地生成了('json_encode'將會這樣做)。 – staticsan 2010-10-25 02:41:58

+0

@Andrew該建議仍然健全,但通常你想用'htmlspecialchars()'編碼到一個視圖。這就夠了。 – alex 2010-10-25 08:46:27

回答

0

使用前:http://au.php.net/manual/en/function.mysql-real-escape-string.php存儲到數據庫之前。

寫到任何用戶界面之前,使用像這樣的自定義函數:

function unescape($string) 
{ 

$search = array("\\x00", "\\n", "\\r", "\\\x1a"); 

$replace = array("\x00","\n", "\r", "\x1a"); 

$retString = str_replace($search, $replace, $string); 

$search = array("\'", '\\'.'"'); 

$replace = array( "'", '"',); 

$retString = str_replace($search, $replace, $retString); 

$search = array("\\\\"); 

$replace = array("\\"); 

$retString = str_replace($search, $replace, $retString); 

return $retString 

} 
+9

這是一個醜陋的功能... – alex 2010-10-25 02:43:04

+0

是的!只是一個想法! – zerodin 2010-10-25 04:47:57

+0

比我的更好..大聲笑我有一個新的功能有\\\\\\\\\\\\\\\\\\\\\\ – murvinlai 2010-10-26 18:31:10

8

它實際上是highly discouraged to use this "magic quotes" feature插入斜槓。一般來說,你永遠不想以轉義的格式將數據存儲在數據庫中;你想在輸出中進行轉義和編碼。

+0

其實我只是查了DB,魔法報價是關閉的。它將存儲麥當勞在DB。但是,從json_encode生成的數據將附加\'。當回到JSON時,必須這樣做。但我怎樣才能刪除JS中的帶? – murvinlai 2010-10-25 01:35:22

+2

這不是*很正確;您希望以適合其發生的方式離開應用程序的數據。也就是說,你以一種不存儲它的方式逃避SQL生成。 – staticsan 2010-10-25 02:40:07

+0

@seatoskyhk,@alex在他的回答中解釋說,在JavaScript中使用JSON解析器。 – Domenic 2010-10-25 05:49:47

4

我會照顧主要問題 - magic_quotes已啓用。

我會disable it並在您的數據庫中使用正確的轉義方法。

然後您不必擔心PHP 奇蹟般地添加斜線。

如果你在談論使用json_encode()時的斜線,它會這樣做。

在JavaScript中使用JSON parser,您將看不到它們(除非其他內容不正確地編碼它們)。

+0

對於JSON部分,我正好需要弄清楚。我不想在提取數據時出現問題。 – murvinlai 2010-10-25 07:54:33

1

試試這個太

function stripslashes (str) { 

    return (str + '').replace(/\\(.?)/g, function (s, n1) { 
    switch (n1) { 
    case '\\': 
     return '\\'; 
    case '0': 
     return '\u0000'; 
    case '': 
     return ''; 
    default: 
     return n1; 
    } 
    }); 
}