【问题标题】:Avoiding slashes added by jQuery serialize()避免 jQuery serialize() 添加的斜线
【发布时间】:2010-12-16 21:47:09
【问题描述】:

我正在使用 jQuery 序列化表单,然后通过 ajax 将其发布到后端以保存到 MySQL。

我遇到了一个问题,对于包含引号 " 和 ' 的文本字段,jQuery 的 .serialize() 添加了一个转义斜杠,该斜杠会被 POST。

例如: '显示器尺寸:22" '正在保存为'显示器尺寸:22\" '。这些斜线也会随着字段的进一步编辑和重新保存而累积,因此最终可能看起来像“显示器大小:22\\\\\\”'。

在 PHP 中处理 $_POST 时,我可以删除所有反斜杠,但这也会删除用户可能合法输入的任何反斜杠。

还有其他方法可以避免这种情况吗?

非常感谢的想法!

【问题讨论】:

  • 除了修复您的 PHP 设置以不首先添加它们吗?
  • 哎呀。所以 this 就是这么多网站通过复制斜杠/转义符同时被破坏,并且 also 仍然容易受到各种 SQL 注入 hijink 的攻击......我只是希望你知道为什么要添加这些斜线,并知道在将结果字符串删除后如何处理它们,然后再将它们提供给您的 SQL
  • jQuery 不这样做 -- >>> $("<form><input name='test' value='"test"' /></form>").serialize(); -- 结果:"test=%22test%22"
  • 数据库管理由 Zend 框架处理,据我所知,数据库输入是自动清理的。我希望如此?
  • E. - 是 - ZF 将使用正确的转义方法进行数据库清理

标签: php jquery


【解决方案1】:

我敢打赌,这不是 jQuery 做的,而是您使用的 PHP 服务器启用了magic quotes

所以要么禁用魔术引号,要么在保存到数据库之前自己去掉斜线

【讨论】:

  • 相反 - 在添加到 db 时不要双重逃避你的斜线......完全剥离它们就像在你的胸口画一个靶心。
  • @gnarf:您应该使用相关的数据库转义功能,例如mysql_real_escape_string 编写查询时。
  • @Andy E - 对 - 因此没有传递已经转义的版本,因此是“双重转义”(嘘魔术引号)——也供参考 SO: How can I disable PHP magic quotes at runtime?
  • stripslashes 和禁用魔术引号都解决了这个问题。我选择只禁用魔术引号。谢谢!
【解决方案2】:

请检查 PHP 的 stripslashes() 函数...

【讨论】:

    【解决方案3】:

    我假设如果用户输入一个“合法”的反斜杠,它也会被转义,所以 stripslashes() 应该可以完成它的工作。

    【讨论】:

    • 是的,经过测试和验证。谢谢!
    猜你喜欢
    • 2012-02-21
    • 2017-09-29
    • 1970-01-01
    • 2020-10-05
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 2019-05-29
    相关资源
    最近更新 更多