web-dev-qa-db-ja.com

ワードプレスは、配列をサニタイズ?

Wp_insert_postを使用して投稿を作成するページにデータを送信するカスタム投稿フォームがあります。ほとんどのデータを簡単にサニタイズすることができますが、私は自分のタグに問題があるので、配列を取得します。

$tags =  $_POST['tags'];

これらのタグをtags_inputとして使用する前に、すべての名前を無害化するにはどうすればよいですか。

ありがとうございます。

5
FLX

誰かが興味を持っているなら、私はこのようにそれを解決しました:

        $tags = $_POST['tags'];
        if (count($tags) > 5){
            echo 'Niet meer dan 5 tags';
            $stop = true;
        }

        if (is_array($tags)) {
            foreach ($tags as &$tag) {
                $tag = esc_attr($tag);
            }
            unset($tag );
        } else {
            $tags = esc_attr($tags);
        }
2
FLX

これはPHPの array map functionで行う方法です。

// Good idea to make sure things are set before using them
$tags = isset( $_POST['tags'] ) ? (array) $_POST['tags'] : array();

// Any of the WordPress data sanitization functions can be used here
$tags = array_map( 'esc_attr', $tags );
16
chrisguitarguy

再帰的な衛生管理が必要だったので、これが私の解決策です。

/**
 * Recursive sanitation for an array
 * 
 * @param $array
 *
 * @return mixed
 */
function recursive_sanitize_text_field($array) {
    foreach ( $array as $key => &$value ) {
        if ( is_array( $value ) ) {
            $value = recursive_sanitize_text_field($value);
        }
        else {
            $value = sanitize_text_field( $value );
        }
    }

    return $array;
}
0
Broshi

この機能はほとんどの場合に使用できます。

/**
 * Recursive sanitation for text or array
 * 
 * @param $array_or_string (array|string)
 * @since  0.1
 * @return mixed
 */
function sanitize_text_or_array_field($array_or_string) {
    if( is_string($array_or_string) ){
        $array_or_string = sanitize_text_field($array_or_string);
    }elseif( is_array($array_or_string) ){
        foreach ( $array_or_string as $key => &$value ) {
            if ( is_array( $value ) ) {
                $value = sanitize_text_or_array_field($value);
            }
            else {
                $value = sanitize_text_field( $value );
            }
        }
    }

    return $array_or_string;
}
0
Lenin Zapata