问题描述

我有一个主题选项页面,用户可以添加某些选项,如 Facebook 链接等。其中一个选项是一些广告代码,并将其保存为一个选项,它一次又一次地被转义。

使用 update_option( 'sidebar_code', $_POST['sidebar_code'] ); 在管理页面<textarea> 中保存代码的最佳方法是什么?

最佳解决方案

stripslashes(wp_filter_post_kses(addslashes($_POST['sidebar_code'])));

但是你应该知道这个过滤器不是 100%安全的。

次佳解决方案

我采取了另一种做法。我用 HTML 实体编码和解码了我的选项。我不知道的一件事是,这是否打开了一个令人讨厌的后门,让人们开始通过 HTML 来破坏 HTML 。我依靠的事实是,只有管理员将会编辑主题选项,但也许我是天真的?

当我保存选项时,这是什么样子:

update_option('my_option', htmlentities(stripslashes($_REQUEST['my_option'])));

这是我检索一个选项时的样子:

html_entity_decode(get_option('my_option',htmlentities($my_default_value)));

第三种解决方案

这不是你的问题的完整答案,但可能指向正确的方向:您可以尝试<?php esc_textarea( $text ) ?>,详细信息请见这里:http://codex.wordpress.org/Function_Reference/esc_textarea

我自己的 metabox textarea 片段看起来像这样:

<?php
  if ( $meta_box['type'] == "textarea" ) {
    $meta_box_value = esc_textarea( get_post_meta($post->ID, $meta_box['name'].'_value', true) );
    echo '<textarea class="meta-textarea" style="width: 100%;" cols="20" rows="2" name="' . $meta_box['name'] . '_value">' . $meta_box_value . '</textarea><br />';
  }
?>

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。