清理文本区域而不是输入

时间:2014-10-26 作者:Tara

我想在用户注册中添加一个新字段。我在用这个tutorial by Paul Underwood.

本教程可以使用,但我想将输入文本切换到我知道如何操作的文本区域。问题是确保WordPress正确保存此信息。

我意识到这是因为sanitize_text_field( $_POST[\'facebook_profile\'] )

我正试图找到一种方法来为textarea而不是文本字段完成同样的事情,但我没有找到任何东西(我理解。我是一名新的PHP开发人员)。如何保存textarea信息?

下面是我使用的确切代码:

add_action( \'show_user_profile\', \'add_extra_social_links\' );
add_action( \'edit_user_profile\', \'add_extra_social_links\' );

function add_extra_social_links( $user )
{
    ?>
        <h3>Additional Information</h3>

        <table class="form-table">
            <tr>
                <th><label for="facebook_profile">Facebook Profile</label></th>
                <td><input type="text" name="facebook_profile" value="<?php echo esc_attr(get_the_author_meta( \'facebook_profile\', $user->ID )); ?>" class="regular-text" /><BR><span class="description">Please enter your Twitter username.</span></td>
            </tr>
        </table>
    <?php
}
get_the_author_meta( $field, $userID ); 
update_user_meta( $user_id, $meta_key, $meta_value, $prev_value );

add_action( \'personal_options_update\', \'save_extra_social_links\' );
add_action( \'edit_user_profile_update\', \'save_extra_social_links\' );

function save_extra_social_links( $user_id )
{
    update_user_meta( $user_id,\'facebook_profile\', sanitize_text_field( $_POST[\'facebook_profile\'] ) );
} 

4 个回复
SO网友:Mark

自WordPress 4.7以来sanitize_textarea_field().

这正是你想要的,从抄本上。

清除用户输入或数据库中的多行字符串。

SO网友:Abhik

wp_kses_post 如果您想在文本区域/wp编辑器中允许某些HTML(如@Bordoni所说,这是最安全的)
esc_textarea 是你可能要找的。

SO网友:Bordoni

您的问题有两种解决方案,其中一些会给您带来更大的灵活性,另一些会使现场更安全。

我喜欢使用wp_kses_post 最重要的是,因为它只允许您在帖子中接受的HTML,但是如果您想删除所有HTML标记,您可以使用wp_kses( $string_unsafe, array() ).

您也可以使用上面引用的经过消毒的输入法,但可以逐行使用它来提供您想要的解决方案。

// When dealing with user input always cast the input as you expect it to be
$lines = explode( "\\n", (string) $_POST[\'facebook_profile\'] );

// Apply the method
$lines = array_map( \'sanitize_text_field\', (array) $lines );

update_user_meta( $user_id,\'facebook_profile\', implode( "\\n", $lines );

As it was pointed below — Going with the answer above might not be the best option, but it\'s a solution that you can consider.

SO网友:Cedon

PHP具有内置的filter\\u var()清理功能。您只需调用该函数,向其提供包含数据的变量,并告诉它要使用哪个过滤器和任何可选标志:

$myTextArea = "This is the data from my text area";
$mySanitizedText = filter_var($myTextArea, FILTER_SANITIZE_STRING);

结束

相关推荐