2010-10-25 133 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; 
    } 
    }); 
}