Php 如何阻止jQueryAjax向JSON字符串添加斜杠?
我正在向wordpress操作发送字符串化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
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,我的字符串按预期显示。谢谢,这很有用。