Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何阻止jQueryAjax向JSON字符串添加斜杠?_Php_Jquery_Ajax_Json_Wordpress - Fatal编程技术网

Php 如何阻止jQueryAjax向JSON字符串添加斜杠?

Php 如何阻止jQueryAjax向JSON字符串添加斜杠?,php,jquery,ajax,json,wordpress,Php,Jquery,Ajax,Json,Wordpress,我正在向wordpress操作发送字符串化JSON对象 console.log( JSON.stringify(alloptions) ); $.ajax({ type: "post", dataType: "json", url: ajaxurl, processData: false, data: { 'action': 'create_preset', 'preset': JSON.stringify(allopti

我正在向wordpress操作发送字符串化JSON对象

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发送之前,字符串化对象的控制台日志如下

因此字符串被正确处理

但另一方面,它却被砍了

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之前一样,没有斜杠

感谢您的帮助

魔术语录不在电视上

*更新和解决方案

Jesse搞定了,WP是麻烦的根源。 由于
wp\u unslash()
正在5.0中修复此问题 我将此添加到我的代码中

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 ;
}
global$wp\u版本;
$new_preset_options=$_POST['preset'];

如果(version_compare($wp_version,'5.0',”WordPress很久以前就决定将斜杠自动添加到所有全局输入变量($\u POST等)。它们通过内部
wp_slash()
函数传递。官方建议删除这些斜杠的方法是使用它们提供的
wp_unslash

wp_unslash( $_POST['preset'] );


**注意:看起来是这样的,当您从全局输入变量请求值时,他们将为您执行
wp\u unslash

brrrrrr,听起来像魔术引号:@jeroen no不是,看起来您是对的,但是您能确认检查
get\u magic\u quotes\u gpc()的值吗
?您是否查看了实际请求以查看它是否在那里转义?(如中所示,查看浏览器网络选项卡或charles proxy或w/e)@Benn他们通过wp_slash传递所有全局输入数据,但看起来可能在5.0中进行了修补,以便在被请求时自动取消刷新:就是这样,只是在普通php ajax上进行了测试,而不是wp,我的字符串按预期显示。谢谢,这很有用。