如何阻止 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 字符串添加斜杠?的主要内容,如果未能解决你的问题,请参考以下文章
如何用jquery $.ajax向aspx页面传递json格式数据
带有SMTP的AJAX jQuery JSON PHPMailer