$_POST字段值在“init”之后更改

时间:2020-06-27 作者:왕뚜껑

我是wordpress开发的新手。

我正在尝试开发一个简单的插件用于实践。它涉及从前端提交表单。表单有一个带有以下代码的输入。

<input type=\'hidden\' name=\'test\' value=\'{"id": 1}\'/>
当我提交表单时,“test”字段的值在;初始化(&Q);钩

我的插件代码如下所示

add_action(\'init\', [$this, \'init\']);

function init() {
    printe_r($_POST);
}

Output:

Array
(
    [test] => {\\"id\\":1}
)
问题是json_decode 出错。我必须使用stripslashes 下面是对json字符串的解码。

json_decode(stripslashes($_POST[\'test\']));
Wordpress中是否需要此行为?

2 个回复
最合适的回答,由SO网友:mozboz 整理而成

是的,这是预期的行为。这里有关于它为什么会这样工作的信息,以及这个可以帮助从更大的数据结构中删除斜杠的函数:https://developer.wordpress.org/reference/functions/stripslashes_deep/

从短期来看,如果这个字段没有JSON,为什么不直接删除它,如果需要多个隐藏字段,则单独添加它们,例如:

<input type=\'hidden\' name=\'testId\' value=\'1\'/>
<input type=\'hidden\' name=\'otherId\' value=\'123\'/>
您可以通过以下方式直接获取:

echo $_POST[\'testId\'];
echo $_POST[\'otherId\'];
将输出:

1
123

SO网友:fuxia

正如@mozboz所解释的,WordPress正在更改$_POST, $_GET, $_REQUEST, 和$_COOKIE. 如果需要原始值,请使用函数filter_input(), 并确保牢记安全问题。

示例:

$test = filter_input( INPUT_POST, \'test\', FILTER_SANITIZE_STRING );