functions-sanitation.php
1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
/**
* @param string $input
* @param string $default_if_invalid
*
* @return string
*/
function wpml_sanitize_hex_color( $input, $default_if_invalid = '' ) {
$input = sanitize_text_field( $input );
$result = $input;
if ( ! is_string( $input ) || ! wpml_is_valid_hex_color( $input ) ) {
$result = $default_if_invalid;
}
return $result;
}
function wpml_sanitize_hex_color_array( $input, $default_if_invalid = '', $bypass_non_strings = true, $recursive = false ) {
$result = $input;
if ( is_array( $input ) ) {
$result = array();
foreach ( $input as $key => $value ) {
if ( is_array( $value ) && $recursive ) {
$result[ $key ] = wpml_sanitize_hex_color_array( $value, $default_if_invalid, $recursive );
} elseif ( is_string( $value ) ) {
$result[ $key ] = wpml_sanitize_hex_color( $value, $default_if_invalid );
} elseif ( $bypass_non_strings ) {
$result[ $key ] = $value;
}
}
}
return $result;
}
/**
* @param string|array $input
*
* @return bool
*/
function wpml_is_valid_hex_color( $input ) {
if (
'transparent' === $input ||
( is_string( $input ) && preg_match( '/' . wpml_get_valid_hex_color_pattern() . '/i', $input ) )
) {
$is_valid = true;
} else {
$try_rgb2hex = is_array( $input ) ? wpml_rgb_to_hex( $input ) : false;
$is_valid = $try_rgb2hex ? preg_match( '/' . wpml_get_valid_hex_color_pattern() . '/i', $try_rgb2hex ) : false;
}
return $is_valid;
}
function wpml_get_valid_hex_color_pattern() {
return '(^#[a-fA-F0-9]{6}$)|(^#[a-fA-F0-9]{3}$)';
}
/**
* Convert RGB color code to HEX code.
*
* @param array $rgb
*
* @return string|false
*/
function wpml_rgb_to_hex( $rgb ) {
if ( ! is_array( $rgb ) || count( $rgb ) < 3 ) {
return false;
}
$hex = '#';
$hex .= str_pad( dechex( $rgb[0] ), 2, '0', STR_PAD_LEFT );
$hex .= str_pad( dechex( $rgb[1] ), 2, '0', STR_PAD_LEFT );
$hex .= str_pad( dechex( $rgb[2] ), 2, '0', STR_PAD_LEFT );
return $hex;
}