【问题标题】:How to strip slashes in Javascript (json)? Any JQuery plugin?如何在Javascript(json)中去除斜杠?任何 JQuery 插件?
【发布时间】:2010-10-25 01:22:23
【问题描述】:

所以,当我将数据保存到数据库中时,PHP 会在单引号或双引号上添加一个 \。这很好。

但是,当使用 json_encode() 将数据传回客户端时;像 McDonald's 这样的 TEXT 在 DB 中存储为 McDonald's 但一旦从 PHP 传回 js,它将被编码为 McDonald\'s

由于我使用的是 jQuery,是否有任何插件可以轻松做到这一点?或者我应该用来正确剥离斜线的任何功能?显然,如果有像\\\\s 这样的情况,函数应该返回\s。 :)

对不起,伙计们。我想我的问题太复杂了。我让它更简单怎么样..

如果我有一个 javascript 变量:

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

我怎样才能去掉 \' ?我应该使用什么正则表达式?

【问题讨论】:

  • 我有点担心这里的很多答案。我的 PHP 安全知识有些过时了,所以我真的没有资格在这里给出一个好的答案,但至关重要的是,如果您确实关闭了魔术引号,请将其替换为 better 转义系统。您的目标应该是防止 SQL 注入和跨站点脚本攻击。我通常会使用mysql_real_escape_string($user_input) 进入数据库并使用htmlentities($db_output) 进入客户端——但这可能不再被认为是100% 安全的。希望有人能提供更好的建议。
  • 您在 JS 中使用什么来解析 JSON?如果生成正确(json_encode 会这样做),无论您使用什么都可以消除所有内容。
  • @Andrew 这个建议仍然是合理的,尽管通常你想用htmlspecialchars() 编码到一个视图。就够了。
  • 嗨@alex。这是一罐我没有资格打开的蠕虫,但我过去的偏好是使用htmlentities(),因为它对用户输入的破坏性明显更大,对呈现的页面没有任何明显的影响(只要您匹配页面编码)。三年前,当我对黑客方法进行一些研究时,我对一个坚定的黑客可以使用的各种 unicode 字符感到震惊——我仍然不明白这些技术中有多少是有效的。我仍然不能 100% 确定 htmlentities() 是否安全,但我知道它比 htmlspecialchars() 更安全。
  • @Andrew Well htmlspecialchars() 仅针对通常用于 XSS 的字符。我认为使用htmlentities() 会做同样的事情,但只是使用&#xx; 样式编码对奇异字符进行膨胀,大多数编码的东西可以通过使用UTF-8 作为字符集来实现。

标签: javascript jquery stripslashes


【解决方案1】:

实际上是highly discouraged to use this "magic quotes" feature 插入了斜线。通常,您永远不想以转义格式将数据存储在数据库中。你想在输出中进行转义和编码。

【讨论】:

  • 其实,我只是检查了数据库,魔术报价已关闭。它将麦当劳存储在数据库中。但是,从 json_encode 生成的数据将附加 \'。回到 JSON 时,必须如此。但是如何删除 JS 中的条带?
  • 这不是完全正确的;您希望以适合其去向的方式在离开应用程序的地方转义数据。也就是说,您将它转义为 SQL 生成的方式不会存储它转义。
  • @seatoskyhk,正如@alex 在他的回答中解释的那样,在 JavaScript 中使用 JSON 解析器。
【解决方案2】:

我会处理主要问题 - magic_quotes 已启用。

我会disable it 并对您的数据库使用适当的转义方法。

那么你就不用担心 PHP神奇地添加斜线了。

如果您在使用 json_encode() 时谈论斜杠,那是有原因的。

在 JavaScript 中使用 JSON parser,您将看不到它们(除非其他东西对它们进行了不正确的编码)。

【讨论】:

  • 对于 JSON 部分,这正是我需要弄清楚的。我不想在提取数据时使用 \'。
【解决方案3】:

【讨论】:

  • 我已经读过了。但它是如此混乱,以至于其他人的评论提供了不同的东西并说它在 IE 中不起作用......
  • 那个不行。 .return error... unmatched ) 在正则表达式中
【解决方案4】:

也试试这个

function stripslashes (str) {

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

【讨论】:

    【解决方案5】:

    在存储到数据库之前使用: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
    
    }
    

    【讨论】:

    • 比我的好.. 哈哈,我有一个新功能,它有 \\\\\\\\\\\\\\\\
    猜你喜欢
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多