Do_sets_sections()不转义引号

时间:2016-01-19 作者:Francisco R

我正在使用Settings API 在自定义设置页面上:

<form action=\'options.php\' method=\'post\'>
    <?php
    settings_fields(\'myplugin_settingsPage\');
    do_settings_sections(\'myplugin_settingsPage\' );
    submit_button();
    ?>
</form>
这是一个非常简单的设置页面,有几个文本输入字段。问题是,一些字段的值包含双引号(例如,Jhon "cracy" Garcia), Wordpress似乎没有摆脱这个角色。数据库中存储的值似乎没有问题,我已经检查过了。但是,当您再次访问设置页面时,这是Wordpress生成的HTML:

<input name=\'myplugin_settingsPage[name]\' value="Jhon "cracy" Garcia" size=40>
正如您所看到的,引号没有进行URL编码,因此生成的HTML被破坏。我做错什么了吗?这是Wordpress中的一个bug吗?

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

我发现了问题。您需要使用esc_attr, 像这样:

function my_setting_render() {
    $options = get_option(\'my_option_name\');
    ?><input name=\'my_option_name[my_setting]\' value="<?php echo esc_attr($options[\'my_setting\']);?>">
    <?php
}

相关推荐

Encoding Method for URLs?

WordPress是否有一种编码URL的方法或API,类似于在URL中使用标题时生成部分URL的方式?我正在编写一个生成URL的插件,并希望使用与其他所有插件相同的方法。例如,我在标题中键入“这是我的博客文章”,然后生成“这是我的博客文章”。