Как предотвратить экранирование при сохранении HTML-кода в значении параметра?


У меня есть страница параметров темы, где пользователь может добавлять определенные параметры, такие как ссылки на Facebook и т.д. Один из вариантов - для некоторого рекламного кода, и при сохранении его в качестве опции он снова и снова экранируется.

Каков наилучший подход для сохранения кода, вставленного на странице администратора <textarea> с использованием update_option( 'sidebar_code', $_POST['sidebar_code'] ); ?

Author: brasofilo, 2011-01-13

3 answers

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

Но вы должны знать, что фильтр kses не на 100% безопасен.

 8
Author: onetrickpony, 2011-01-13 19:46:03

Я применил к этому другой подход. Я кодировал и декодировал свои параметры с помощью HTML-объектов. Единственное, в чем я не уверен, так это в том, открывает ли это неприятную заднюю дверь для людей, которые могут использовать компрометирующий HTML. Я полагаюсь на тот факт, что в любом случае только администраторы будут редактировать параметры темы, но, может быть, я наивен?

Вот как это выглядит, когда я сохраняю опцию:

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

И вот как это выглядит, когда я извлекаю опцию:

html_entity_decode(get_option('my_option',htmlentities($my_default_value)));
 12
Author: , 2011-02-03 15:12:47

Это не полный ответ на ваш вопрос, но, возможно, указывает вам правильное направление: вы можете попробовать <?php esc_textarea( $text ) ?>, как подробно описано в кодексе здесь: http://codex.wordpress.org/Function_Reference/esc_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 />';
  }
?>
 2
Author: gillespieza, 2011-07-19 07:45:37