問題描述
我有一個主題選項頁面,使用者可以新增某些選項,如 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。