我为文本输入添加了一个元字段。我想允许一些html标记,例如<strong>
和<i>
例如:<strong>hello</strong> world
我可以保存输入字段值而无需消毒,这样也没有问题:
if( isset( $_POST[\'my_field\'] ) ){
update_post_meta($post->ID, \'my_field\', $_POST[\'my_field\']);
}
但是如果我使用
sanitize_text_field
功能如下,保存时将删除html标记:
if( isset( $_POST[\'my_field\'] ) ){
update_post_meta($post->ID, \'my_field\', sanitize_text_field($_POST[\'my_field\']));
}
在存储之前,用html标记清理值的最佳方法是什么?
SO网友:cybmeta
在我看来,自定义字段中的HTML是一个奇怪的自定义字段用例。如果使用HTML的目的仅仅是外观和感觉(<strong>
和<i>
可以看作只是外观和感觉)。如果在自定义字段输出上使用HTML标记,或者使用CSS应用粗体/斜体样式,效果会更好。
尽管如此,您可以尝试使用PHP strip_tags()
function或wp_kses()
function. 两者都允许您剥离HTML标记,但允许其中一些标记。示例使用wp_kses()
:
$allowed_html = array(
\'i\' => array(),
\'strong\' => array(),
);
if( isset( $_POST[\'my_field\'] ) ){
$meta_value = wp_kses( $_POST[\'my_field\'], $allowed_html );
update_post_meta( $post->ID, \'my_field\', $meta_value );
}