文本区域字段由于某种未知原因而被转义

时间:2018-08-05 作者:De Coder

它不会发生在WordPress之外,所以我在这里发布。

我正在自定义表单中使用textarea字段,在我有机会对其进行任何操作之前,我发现它已被转义:

echo $_POST[\'my_textarea_field\'];
让我们做点什么吧!

(顺便说一句:不,我不会回显沙盒外的帖子字段)

这是PHP 7.1,因此不需要担心magic\\u引号或safe\\u模式。

切换回2017年并禁用所有插件后尝试。

这应该是基本的功能,但它让我感到困惑。

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

无论服务器设置如何,WordPress总是添加神奇的引号。这确保了一致性,无论环境如何。尽管魔法引号已经从PHP中删除或弃用,WordPress仍保留这种行为,以向后兼容旧版本的PHP和使用旧版本PHP编写的插件。

如果要删除斜杠,可以使用stripslashes()stripslashesdeep():

$_POST = stripslashes_deep( $_POST );
请记住,由于这种行为,WordPress的某些部分需要经过删减的数据。查看以下引用自an announcement regarding the REST API:

我们将不一致的删减数据视为一个主要错误,并正在更改API基础架构以确保未删减的数据。这将确保无论数据来自何方,数据都是一致的。回调现在将只接收未刷新的数据,并且无论原始数据源或请求方法如何,都可以依赖于此。

如果您使用的函数期望在回调中使用斜杠数据,则需要在传递到这些函数之前斜杠数据。需要斜杠数据的常用函数有wp_insert_post, wp_update_post, update_post_meta, wp_insert_term, wp_insert_user, 和其他人一起。在将数据传递给这些函数之前,必须调用wp_slash() 在您的数据上。

虽然这是关于RESTAPI的,但如果您在自己的代码中更改斜杠的行为,您可能会遇到同样的问题。

结束