如何阻止 jQuery ajax 向 JSON 字符串添加斜杠?

Posted

技术标签:

【中文标题】如何阻止 jQuery ajax 向 JSON 字符串添加斜杠?【英文标题】:How to stop jQuery ajax from adding slashes to JSON string? 【发布时间】:2015-08-07 04:34:36 【问题描述】:

我将字符串化的 JSON 对象发送到 wordpress 操作

console.log( JSON.stringify(alloptions) );

$.ajax(
    type: "post",
    dataType: "json",
    url: ajaxurl,
    processData: false,
    data: 
        'action': 'create_preset',
        'preset': JSON.stringify(alloptions)
    ,
    success: function( response ) 

        console.log( response );

    
);

通过ajax发送前的字符串化对象的控制台日志是这样的

http://prntscr.com/7990ro

所以字符串被正确处理,

但另一方面它带有斜线

function _create_preset()

    if(!is_admin() && !isset($_POST['preset'])) return;

    print_r($_POST['preset']);



add_action("wp_ajax_create_preset", "_create_preset");

给了

\"get_presets\":\"eedewd\",\"site_width\":\"1400px\",\"layout_type\":...

我知道我可以使用

stripslashes( $_POST['preset'] )

清理它,但这是我试图避免的。我需要将 JSON 字符串发送到操作,因为它在 ajax 之前,没有斜杠。

感谢任何帮助!

魔术引号不在

http://prntscr.com/7996a9

*更新和解决方案

Jesse 成功了,而 WP 造成了麻烦。 由于wp_unslash() 正在解决此问题的 5.0 https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/issues/172 我将此添加到我的代码中

global $wp_version;
$new_preset_options = $_POST['preset'];

if ( version_compare( $wp_version, '5.0', '<' ) ) 

    $new_preset_content = wp_unslash( $new_preset_options );

else

    $new_preset_content = $new_preset_options ;

【问题讨论】:

brrrrrrrrr,听起来像魔术引号:php.net/manual/en/security.magicquotes.what.php @jeroen 不是,prntscr.com/7996a9 看起来你是对的,但你能确认检查get_magic_quotes_gpc()的值吗? 您是否查看了实际请求以查看它是否在那里转义? (如,查看浏览器网络选项卡或查尔斯代理或 w/e) @Benn 他们通过 wp_slash 传递所有全局输入数据,但看起来可能会在 5.0 中进行修补,以便在请求时自动取消斜线:github.com/WordPress-Coding-Standards/… 【参考方案1】:

WordPress 很久以前就决定向所有全局输入变量($_POST 等)自动添加斜杠。他们通过内部wp_slash() 函数传递它。官方推荐的删除这些斜线的方法是使用他们提供的wp_unslash

wp_unslash( $_POST['preset'] );

Here is the codex reference.

**注意:它看起来像这样might be getting fixed in version 5.0,当您从全局输入变量请求值时,他们将在其中为您执行wp_unslash

【讨论】:

就是这样,只是在普通 php ajax 而不是 WP 上测试,我的字符串按预期出现。 prntscr.com/799kl6 谢谢,很有用。 如果 json 必须包含一些 "?

以上是关于如何阻止 jQuery ajax 向 JSON 字符串添加斜杠?的主要内容,如果未能解决你的问题,请参考以下文章

JSON和AJAX与jQuery有啥区别?

Ajax json jquery实现菜单案例

如何用jquery $.ajax向aspx页面传递json格式数据

带有SMTP的AJAX jQuery JSON PHPMailer

jQuery通过Ajax向PHP服务端发送请求并返回JSON数据

js jquery中的$.ajax中的data属性需要用json格式向后台发送数据