Changeset 42343 for trunk/src/wp-includes/formatting.php
- Timestamp:
- 11/30/2017 11:09:33 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/formatting.php
r42249 r42343 51 51 function wptexturize( $text, $reset = false ) { 52 52 global $wp_cockneyreplace, $shortcode_tags; 53 static $static_characters = null,54 $static_replacements = null,55 $dynamic_characters = null,56 $dynamic_replacements = null,57 $default_no_texturize_tags = null,53 static $static_characters = null, 54 $static_replacements = null, 55 $dynamic_characters = null, 56 $dynamic_replacements = null, 57 $default_no_texturize_tags = null, 58 58 $default_no_texturize_shortcodes = null, 59 $run_texturize = true,60 $apos = null,61 $prime = null,62 $double_prime = null,63 $opening_quote = null,64 $closing_quote = null,65 $opening_single_quote = null,66 $closing_single_quote = null,67 $open_q_flag = '<!--oq-->',68 $open_sq_flag = '<!--osq-->',69 $apos_flag = '<!--apos-->';59 $run_texturize = true, 60 $apos = null, 61 $prime = null, 62 $double_prime = null, 63 $opening_quote = null, 64 $closing_quote = null, 65 $opening_single_quote = null, 66 $closing_single_quote = null, 67 $open_q_flag = '<!--oq-->', 68 $open_sq_flag = '<!--osq-->', 69 $apos_flag = '<!--apos-->'; 70 70 71 71 // If there's nothing to do, just stop. … … 118 118 $em_dash = _x( '—', 'em dash' ); 119 119 120 $default_no_texturize_tags = array('pre', 'code', 'kbd', 'style', 'script', 'tt');121 $default_no_texturize_shortcodes = array( 'code');120 $default_no_texturize_tags = array( 'pre', 'code', 'kbd', 'style', 'script', 'tt' ); 121 $default_no_texturize_shortcodes = array( 'code' ); 122 122 123 123 // if a plugin has provided an autocorrect array, use it 124 if ( isset( $wp_cockneyreplace) ) {125 $cockney = array_keys( $wp_cockneyreplace );124 if ( isset( $wp_cockneyreplace ) ) { 125 $cockney = array_keys( $wp_cockneyreplace ); 126 126 $cockneyreplace = array_values( $wp_cockneyreplace ); 127 127 } else { … … 130 130 * lines of code 'til we have enough of 'em, then we need to insert apostrophes instead of quotes. 131 131 */ 132 $cockney = explode( ',', _x( "'tain't,'twere,'twas,'tis,'twill,'til,'bout,'nuff,'round,'cause,'em", 133 'Comma-separated list of words to texturize in your language' ) ); 134 135 $cockneyreplace = explode( ',', _x( '’tain’t,’twere,’twas,’tis,’twill,’til,’bout,’nuff,’round,’cause,’em', 136 'Comma-separated list of replacement words in your language' ) ); 137 } 138 139 $static_characters = array_merge( array( '...', '``', '\'\'', ' (tm)' ), $cockney ); 132 $cockney = explode( 133 ',', _x( 134 "'tain't,'twere,'twas,'tis,'twill,'til,'bout,'nuff,'round,'cause,'em", 135 'Comma-separated list of words to texturize in your language' 136 ) 137 ); 138 139 $cockneyreplace = explode( 140 ',', _x( 141 '’tain’t,’twere,’twas,’tis,’twill,’til,’bout,’nuff,’round,’cause,’em', 142 'Comma-separated list of replacement words in your language' 143 ) 144 ); 145 } 146 147 $static_characters = array_merge( array( '...', '``', '\'\'', ' (tm)' ), $cockney ); 140 148 $static_replacements = array_merge( array( '…', $opening_quote, $closing_quote, ' ™' ), $cockneyreplace ); 141 142 149 143 150 // Pattern-based replacements of characters. 144 151 // Sort the remaining patterns into several arrays for performance tuning. 145 $dynamic_characters = array( 'apos' => array(), 'quote' => array(), 'dash' => array() ); 146 $dynamic_replacements = array( 'apos' => array(), 'quote' => array(), 'dash' => array() ); 147 $dynamic = array(); 148 $spaces = wp_spaces_regexp(); 152 $dynamic_characters = array( 153 'apos' => array(), 154 'quote' => array(), 155 'dash' => array(), 156 ); 157 $dynamic_replacements = array( 158 'apos' => array(), 159 'quote' => array(), 160 'dash' => array(), 161 ); 162 $dynamic = array(); 163 $spaces = wp_spaces_regexp(); 149 164 150 165 // '99' and '99" are ambiguous among other patterns; assume it's an abbreviated year at the end of a quotation. … … 158 173 // '99 '99s '99's (apostrophe) But never '9 or '99% or '999 or '99.0. 159 174 if ( "'" !== $apos ) { 160 $dynamic[ '/\'(?=\d\d(?:\Z|(?![%\d]|[.,]\d)))/'] = $apos_flag;175 $dynamic['/\'(?=\d\d(?:\Z|(?![%\d]|[.,]\d)))/'] = $apos_flag; 161 176 } 162 177 … … 176 191 } 177 192 178 $dynamic_characters['apos'] = array_keys( $dynamic );193 $dynamic_characters['apos'] = array_keys( $dynamic ); 179 194 $dynamic_replacements['apos'] = array_values( $dynamic ); 180 $dynamic = array();195 $dynamic = array(); 181 196 182 197 // Quoted Numbers like "42" … … 190 205 } 191 206 192 $dynamic_characters['quote'] = array_keys( $dynamic );207 $dynamic_characters['quote'] = array_keys( $dynamic ); 193 208 $dynamic_replacements['quote'] = array_values( $dynamic ); 194 $dynamic = array();209 $dynamic = array(); 195 210 196 211 // Dashes and spaces 197 $dynamic[ '/---/'] = $em_dash;212 $dynamic['/---/'] = $em_dash; 198 213 $dynamic[ '/(?<=^|' . $spaces . ')--(?=$|' . $spaces . ')/' ] = $em_dash; 199 $dynamic[ '/(?<!xn)--/' ]= $en_dash;200 $dynamic[ '/(?<=^|' . $spaces . ')-(?=$|' . $spaces . ')/' ] = $en_dash;201 202 $dynamic_characters['dash'] = array_keys( $dynamic );214 $dynamic['/(?<!xn)--/'] = $en_dash; 215 $dynamic[ '/(?<=^|' . $spaces . ')-(?=$|' . $spaces . ')/' ] = $en_dash; 216 217 $dynamic_characters['dash'] = array_keys( $dynamic ); 203 218 $dynamic_replacements['dash'] = array_values( $dynamic ); 204 219 } … … 222 237 $no_texturize_shortcodes = apply_filters( 'no_texturize_shortcodes', $default_no_texturize_shortcodes ); 223 238 224 $no_texturize_tags_stack = array();239 $no_texturize_tags_stack = array(); 225 240 $no_texturize_shortcodes_stack = array(); 226 241 … … 228 243 229 244 preg_match_all( '@\[/?([^<>&/\[\]\x00-\x20=]++)@', $text, $matches ); 230 $tagnames = array_intersect( array_keys( $shortcode_tags ), $matches[1] );245 $tagnames = array_intersect( array_keys( $shortcode_tags ), $matches[1] ); 231 246 $found_shortcodes = ! empty( $tagnames ); 232 $shortcode_regex = $found_shortcodes ? _get_wptexturize_shortcode_regex( $tagnames ) : '';233 $regex = _get_wptexturize_split_regex( $shortcode_regex );247 $shortcode_regex = $found_shortcodes ? _get_wptexturize_shortcode_regex( $tagnames ) : ''; 248 $regex = _get_wptexturize_split_regex( $shortcode_regex ); 234 249 235 250 $textarr = preg_split( $regex, $text, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY ); … … 250 265 _wptexturize_pushpop_element( $curl, $no_texturize_tags_stack, $no_texturize_tags ); 251 266 } 252 253 267 } elseif ( '' === trim( $curl ) ) { 254 268 // This is a newline between delimiters. Performance improves when we check this. … … 265 279 continue; 266 280 } 267 268 281 } elseif ( empty( $no_texturize_shortcodes_stack ) && empty( $no_texturize_tags_stack ) ) { 269 282 // This is neither a delimiter, nor is this content inside of no_texturize pairs. Do texturize. … … 315 328 */ 316 329 function wptexturize_primes( $haystack, $needle, $prime, $open_quote, $close_quote ) { 317 $spaces = wp_spaces_regexp();318 $flag = '<!--wp-prime-or-quote-->';319 $quote_pattern = "/$needle(?=\\Z|[.,:;!?)}\\-\\]]|>|" . $spaces . ")/";330 $spaces = wp_spaces_regexp(); 331 $flag = '<!--wp-prime-or-quote-->'; 332 $quote_pattern = "/$needle(?=\\Z|[.,:;!?)}\\-\\]]|>|" . $spaces . ')/'; 320 333 $prime_pattern = "/(?<=\\d)$needle/"; 321 334 $flag_after_digit = "/(?<=\\d)$flag/"; … … 440 453 $pre_tags = array(); 441 454 442 if ( trim( $pee) === '' )455 if ( trim( $pee ) === '' ) { 443 456 return ''; 457 } 444 458 445 459 // Just to make things a little easier, pad the end. … … 450 464 * Replace pre tags with placeholders and bring them back after autop. 451 465 */ 452 if ( strpos( $pee, '<pre') !== false ) {466 if ( strpos( $pee, '<pre' ) !== false ) { 453 467 $pee_parts = explode( '</pre>', $pee ); 454 $last_pee = array_pop($pee_parts);455 $pee = '';456 $i = 0;468 $last_pee = array_pop( $pee_parts ); 469 $pee = ''; 470 $i = 0; 457 471 458 472 foreach ( $pee_parts as $pee_part ) { 459 $start = strpos( $pee_part, '<pre');473 $start = strpos( $pee_part, '<pre' ); 460 474 461 475 // Malformed html? … … 465 479 } 466 480 467 $name = "<pre wp-pre-tag-$i></pre>";468 $pre_tags[ $name] = substr( $pee_part, $start ) . '</pre>';481 $name = "<pre wp-pre-tag-$i></pre>"; 482 $pre_tags[ $name ] = substr( $pee_part, $start ) . '</pre>'; 469 483 470 484 $pee .= substr( $pee_part, 0, $start ) . $name; … … 475 489 } 476 490 // Change multiple <br>s into two line breaks, which will turn into paragraphs. 477 $pee = preg_replace( '|<br\s*/?>\s*<br\s*/?>|', "\n\n", $pee);491 $pee = preg_replace( '|<br\s*/?>\s*<br\s*/?>|', "\n\n", $pee ); 478 492 479 493 $allblocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary)'; 480 494 481 495 // Add a double line break above block-level opening tags. 482 $pee = preg_replace( '!(<' . $allblocks . '[\s/>])!', "\n\n$1", $pee);496 $pee = preg_replace( '!(<' . $allblocks . '[\s/>])!', "\n\n$1", $pee ); 483 497 484 498 // Add a double line break below block-level closing tags. 485 $pee = preg_replace( '!(</' . $allblocks . '>)!', "$1\n\n", $pee);499 $pee = preg_replace( '!(</' . $allblocks . '>)!', "$1\n\n", $pee ); 486 500 487 501 // Standardize newline characters to "\n". 488 $pee = str_replace( array("\r\n", "\r"), "\n", $pee);502 $pee = str_replace( array( "\r\n", "\r" ), "\n", $pee ); 489 503 490 504 // Find newlines in all elements and add placeholders. 491 $pee = wp_replace_in_html_tags( $pee, array( "\n" => " <!-- wpnl --> ") );505 $pee = wp_replace_in_html_tags( $pee, array( "\n" => ' <!-- wpnl --> ' ) ); 492 506 493 507 // Collapse line breaks before and after <option> elements so they don't get autop'd. … … 524 538 525 539 // Remove more than two contiguous line breaks. 526 $pee = preg_replace( "/\n\n+/", "\n\n", $pee);540 $pee = preg_replace( "/\n\n+/", "\n\n", $pee ); 527 541 528 542 // Split up the contents into an array of strings, separated by double line breaks. 529 $pees = preg_split( '/\n\s*\n/', $pee, -1, PREG_SPLIT_NO_EMPTY);543 $pees = preg_split( '/\n\s*\n/', $pee, -1, PREG_SPLIT_NO_EMPTY ); 530 544 531 545 // Reset $pee prior to rebuilding. … … 534 548 // Rebuild the content as a string, wrapping every bit with a <p>. 535 549 foreach ( $pees as $tinkle ) { 536 $pee .= '<p>' . trim( $tinkle, "\n") . "</p>\n";550 $pee .= '<p>' . trim( $tinkle, "\n" ) . "</p>\n"; 537 551 } 538 552 539 553 // Under certain strange conditions it could create a P of entirely whitespace. 540 $pee = preg_replace( '|<p>\s*</p>|', '', $pee);554 $pee = preg_replace( '|<p>\s*</p>|', '', $pee ); 541 555 542 556 // Add a closing <p> inside <div>, <address>, or <form> tag if missing. 543 $pee = preg_replace( '!<p>([^<]+)</(div|address|form)>!', "<p>$1</p></$2>", $pee);557 $pee = preg_replace( '!<p>([^<]+)</(div|address|form)>!', '<p>$1</p></$2>', $pee ); 544 558 545 559 // If an opening or closing block element tag is wrapped in a <p>, unwrap it. 546 $pee = preg_replace( '!<p>\s*(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee);560 $pee = preg_replace( '!<p>\s*(</?' . $allblocks . '[^>]*>)\s*</p>!', '$1', $pee ); 547 561 548 562 // In some cases <li> may get wrapped in <p>, fix them. 549 $pee = preg_replace( "|<p>(<li.+?)</p>|", "$1", $pee);563 $pee = preg_replace( '|<p>(<li.+?)</p>|', '$1', $pee ); 550 564 551 565 // If a <blockquote> is wrapped with a <p>, move it inside the <blockquote>. 552 $pee = preg_replace( '|<p><blockquote([^>]*)>|i', "<blockquote$1><p>", $pee);553 $pee = str_replace( '</blockquote></p>', '</p></blockquote>', $pee);566 $pee = preg_replace( '|<p><blockquote([^>]*)>|i', '<blockquote$1><p>', $pee ); 567 $pee = str_replace( '</blockquote></p>', '</p></blockquote>', $pee ); 554 568 555 569 // If an opening or closing block element tag is preceded by an opening <p> tag, remove it. 556 $pee = preg_replace( '!<p>\s*(</?' . $allblocks . '[^>]*>)!', "$1", $pee);570 $pee = preg_replace( '!<p>\s*(</?' . $allblocks . '[^>]*>)!', '$1', $pee ); 557 571 558 572 // If an opening or closing block element tag is followed by a closing <p> tag, remove it. 559 $pee = preg_replace( '!(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee);573 $pee = preg_replace( '!(</?' . $allblocks . '[^>]*>)\s*</p>!', '$1', $pee ); 560 574 561 575 // Optionally insert line breaks. 562 576 if ( $br ) { 563 577 // Replace newlines that shouldn't be touched with a placeholder. 564 $pee = preg_replace_callback( '/<(script|style).*?<\/\\1>/s', '_autop_newline_preservation_helper', $pee);578 $pee = preg_replace_callback( '/<(script|style).*?<\/\\1>/s', '_autop_newline_preservation_helper', $pee ); 565 579 566 580 // Normalize <br> … … 568 582 569 583 // Replace any new line characters that aren't preceded by a <br /> with a <br />. 570 $pee = preg_replace( '|(?<!<br />)\s*\n|', "<br />\n", $pee);584 $pee = preg_replace( '|(?<!<br />)\s*\n|', "<br />\n", $pee ); 571 585 572 586 // Replace newline placeholders with newlines. 573 $pee = str_replace( '<WPPreserveNewline />', "\n", $pee);587 $pee = str_replace( '<WPPreserveNewline />', "\n", $pee ); 574 588 } 575 589 576 590 // If a <br /> tag is after an opening or closing block tag, remove it. 577 $pee = preg_replace( '!(</?' . $allblocks . '[^>]*>)\s*<br />!', "$1", $pee);591 $pee = preg_replace( '!(</?' . $allblocks . '[^>]*>)\s*<br />!', '$1', $pee ); 578 592 579 593 // If a <br /> tag is before a subset of opening or closing block tags, remove it. 580 $pee = preg_replace( '!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!', '$1', $pee);594 $pee = preg_replace( '!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!', '$1', $pee ); 581 595 $pee = preg_replace( "|\n</p>$|", '</p>', $pee ); 582 596 583 597 // Replace placeholder <pre> tags with their original content. 584 if ( !empty($pre_tags) ) 585 $pee = str_replace(array_keys($pre_tags), array_values($pre_tags), $pee); 598 if ( ! empty( $pre_tags ) ) { 599 $pee = str_replace( array_keys( $pre_tags ), array_values( $pre_tags ), $pee ); 600 } 586 601 587 602 // Restore newlines in all elements. … … 689 704 . '(?:-->)?'; // End of comment. If not found, match all input. 690 705 691 $html_regex = 706 $html_regex = // Needs replaced with wp_html_split() per Shortcode API Roadmap. 692 707 '<' // Find start of element. 693 708 . '(?(?=!--)' // Is this a comment? … … 756 771 if ( 1 === count( $replace_pairs ) ) { 757 772 // Extract $needle and $replace. 758 foreach ( $replace_pairs as $needle => $replace ); 773 foreach ( $replace_pairs as $needle => $replace ) { 774 } 759 775 760 776 // Loop through delimiters (elements) only. 761 777 for ( $i = 1, $c = count( $textarr ); $i < $c; $i += 2 ) { 762 if ( false !== strpos( $textarr[ $i], $needle ) ) {763 $textarr[ $i] = str_replace( $needle, $replace, $textarr[$i] );764 $changed = true;778 if ( false !== strpos( $textarr[ $i ], $needle ) ) { 779 $textarr[ $i ] = str_replace( $needle, $replace, $textarr[ $i ] ); 780 $changed = true; 765 781 } 766 782 } … … 772 788 for ( $i = 1, $c = count( $textarr ); $i < $c; $i += 2 ) { 773 789 foreach ( $needles as $needle ) { 774 if ( false !== strpos( $textarr[ $i], $needle ) ) {775 $textarr[ $i] = strtr( $textarr[$i], $replace_pairs );776 $changed = true;790 if ( false !== strpos( $textarr[ $i ], $needle ) ) { 791 $textarr[ $i ] = strtr( $textarr[ $i ], $replace_pairs ); 792 $changed = true; 777 793 // After one strtr() break out of the foreach loop and look at next element. 778 794 break; … … 799 815 */ 800 816 function _autop_newline_preservation_helper( $matches ) { 801 return str_replace( "\n", "<WPPreserveNewline />", $matches[0] );817 return str_replace( "\n", '<WPPreserveNewline />', $matches[0] ); 802 818 } 803 819 … … 817 833 global $shortcode_tags; 818 834 819 if ( empty( $shortcode_tags ) || ! is_array( $shortcode_tags ) ) {835 if ( empty( $shortcode_tags ) || ! is_array( $shortcode_tags ) ) { 820 836 return $pee; 821 837 } 822 838 823 839 $tagregexp = join( '|', array_map( 'preg_quote', array_keys( $shortcode_tags ) ) ); 824 $spaces = wp_spaces_regexp();840 $spaces = wp_spaces_regexp(); 825 841 826 842 // phpcs:disable Squiz.Strings.ConcatenationSpacing.PaddingFound -- don't remove regex indentation … … 833 849 . "($tagregexp)" // 2: Shortcode name 834 850 . '(?![\\w-])' // Not followed by word character or hyphen 835 851 // Unroll the loop: Inside the opening shortcode tag 836 852 . '[^\\]\\/]*' // Not a closing bracket or forward slash 837 853 . '(?:' … … 875 891 function seems_utf8( $str ) { 876 892 mbstring_binary_safe_encoding(); 877 $length = strlen( $str);893 $length = strlen( $str ); 878 894 reset_mbstring_encoding(); 879 for ($i=0; $i < $length; $i++) { 880 $c = ord($str[$i]); 881 if ($c < 0x80) $n = 0; // 0bbbbbbb 882 elseif (($c & 0xE0) == 0xC0) $n=1; // 110bbbbb 883 elseif (($c & 0xF0) == 0xE0) $n=2; // 1110bbbb 884 elseif (($c & 0xF8) == 0xF0) $n=3; // 11110bbb 885 elseif (($c & 0xFC) == 0xF8) $n=4; // 111110bb 886 elseif (($c & 0xFE) == 0xFC) $n=5; // 1111110b 887 else return false; // Does not match any model 888 for ($j=0; $j<$n; $j++) { // n bytes matching 10bbbbbb follow ? 889 if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80)) 895 for ( $i = 0; $i < $length; $i++ ) { 896 $c = ord( $str[ $i ] ); 897 if ( $c < 0x80 ) { 898 $n = 0; // 0bbbbbbb 899 } elseif ( ( $c & 0xE0 ) == 0xC0 ) { 900 $n = 1; // 110bbbbb 901 } elseif ( ( $c & 0xF0 ) == 0xE0 ) { 902 $n = 2; // 1110bbbb 903 } elseif ( ( $c & 0xF8 ) == 0xF0 ) { 904 $n = 3; // 11110bbb 905 } elseif ( ( $c & 0xFC ) == 0xF8 ) { 906 $n = 4; // 111110bb 907 } elseif ( ( $c & 0xFE ) == 0xFC ) { 908 $n = 5; // 1111110b 909 } else { 910 return false; // Does not match any model 911 } 912 for ( $j = 0; $j < $n; $j++ ) { // n bytes matching 10bbbbbb follow ? 913 if ( ( ++$i == $length ) || ( ( ord( $str[ $i ] ) & 0xC0 ) != 0x80 ) ) { 890 914 return false; 915 } 891 916 } 892 917 } … … 920 945 $string = (string) $string; 921 946 922 if ( 0 === strlen( $string ) ) 947 if ( 0 === strlen( $string ) ) { 923 948 return ''; 949 } 924 950 925 951 // Don't bother if there are no specialchars - saves some processing 926 if ( ! preg_match( '/[&<>"\']/', $string ) ) 952 if ( ! preg_match( '/[&<>"\']/', $string ) ) { 927 953 return $string; 954 } 928 955 929 956 // Account for the previous behaviour of the function when the $quote_style is not an accepted value 930 if ( empty( $quote_style ) ) 957 if ( empty( $quote_style ) ) { 931 958 $quote_style = ENT_NOQUOTES; 932 elseif ( ! in_array( $quote_style, array( 0, 2, 3, 'single', 'double' ), true ) )959 } elseif ( ! in_array( $quote_style, array( 0, 2, 3, 'single', 'double' ), true ) ) { 933 960 $quote_style = ENT_QUOTES; 961 } 934 962 935 963 // Store the site charset as a static to avoid multiple calls to wp_load_alloptions() … … 938 966 if ( ! isset( $_charset ) ) { 939 967 $alloptions = wp_load_alloptions(); 940 $_charset = isset( $alloptions['blog_charset'] ) ? $alloptions['blog_charset'] : '';968 $_charset = isset( $alloptions['blog_charset'] ) ? $alloptions['blog_charset'] : ''; 941 969 } 942 970 $charset = $_charset; 943 971 } 944 972 945 if ( in_array( $charset, array( 'utf8', 'utf-8', 'UTF8' ) ) ) 973 if ( in_array( $charset, array( 'utf8', 'utf-8', 'UTF8' ) ) ) { 946 974 $charset = 'UTF-8'; 975 } 947 976 948 977 $_quote_style = $quote_style; 949 978 950 979 if ( $quote_style === 'double' ) { 951 $quote_style = ENT_COMPAT;980 $quote_style = ENT_COMPAT; 952 981 $_quote_style = ENT_COMPAT; 953 982 } elseif ( $quote_style === 'single' ) { … … 964 993 965 994 // Back-compat. 966 if ( 'single' === $_quote_style ) 995 if ( 'single' === $_quote_style ) { 967 996 $string = str_replace( "'", ''', $string ); 997 } 968 998 969 999 return $string; … … 1005 1035 if ( empty( $quote_style ) ) { 1006 1036 $quote_style = ENT_NOQUOTES; 1007 } elseif ( ! in_array( $quote_style, array( 0, 2, 3, 'single', 'double' ), true ) ) {1037 } elseif ( ! in_array( $quote_style, array( 0, 2, 3, 'single', 'double' ), true ) ) { 1008 1038 $quote_style = ENT_QUOTES; 1009 1039 } 1010 1040 1011 1041 // More complete than get_html_translation_table( HTML_SPECIALCHARS ) 1012 $single = array( ''' => '\'', ''' => '\'' ); 1013 $single_preg = array( '/�*39;/' => ''', '/�*27;/i' => ''' ); 1014 $double = array( '"' => '"', '"' => '"', '"' => '"' ); 1015 $double_preg = array( '/�*34;/' => '"', '/�*22;/i' => '"' ); 1016 $others = array( '<' => '<', '<' => '<', '>' => '>', '>' => '>', '&' => '&', '&' => '&', '&' => '&' ); 1017 $others_preg = array( '/�*60;/' => '<', '/�*62;/' => '>', '/�*38;/' => '&', '/�*26;/i' => '&' ); 1042 $single = array( 1043 ''' => '\'', 1044 ''' => '\'', 1045 ); 1046 $single_preg = array( 1047 '/�*39;/' => ''', 1048 '/�*27;/i' => ''', 1049 ); 1050 $double = array( 1051 '"' => '"', 1052 '"' => '"', 1053 '"' => '"', 1054 ); 1055 $double_preg = array( 1056 '/�*34;/' => '"', 1057 '/�*22;/i' => '"', 1058 ); 1059 $others = array( 1060 '<' => '<', 1061 '<' => '<', 1062 '>' => '>', 1063 '>' => '>', 1064 '&' => '&', 1065 '&' => '&', 1066 '&' => '&', 1067 ); 1068 $others_preg = array( 1069 '/�*60;/' => '<', 1070 '/�*62;/' => '>', 1071 '/�*38;/' => '&', 1072 '/�*26;/i' => '&', 1073 ); 1018 1074 1019 1075 if ( $quote_style === ENT_QUOTES ) { 1020 $translation = array_merge( $single, $double, $others );1076 $translation = array_merge( $single, $double, $others ); 1021 1077 $translation_preg = array_merge( $single_preg, $double_preg, $others_preg ); 1022 1078 } elseif ( $quote_style === ENT_COMPAT || $quote_style === 'double' ) { 1023 $translation = array_merge( $double, $others );1079 $translation = array_merge( $double, $others ); 1024 1080 $translation_preg = array_merge( $double_preg, $others_preg ); 1025 1081 } elseif ( $quote_style === 'single' ) { 1026 $translation = array_merge( $single, $others );1082 $translation = array_merge( $single, $others ); 1027 1083 $translation_preg = array_merge( $single_preg, $others_preg ); 1028 1084 } elseif ( $quote_style === ENT_NOQUOTES ) { 1029 $translation = $others;1085 $translation = $others; 1030 1086 $translation_preg = $others_preg; 1031 1087 } … … 1072 1128 } 1073 1129 // We can't demand utf8 in the PCRE installation, so just return the string in those cases 1074 if ( ! $utf8_pcre ) {1130 if ( ! $utf8_pcre ) { 1075 1131 return $string; 1076 1132 } … … 1099 1155 */ 1100 1156 function utf8_uri_encode( $utf8_string, $length = 0 ) { 1101 $unicode = '';1102 $values = array();1103 $num_octets = 1;1157 $unicode = ''; 1158 $values = array(); 1159 $num_octets = 1; 1104 1160 $unicode_length = 0; 1105 1161 … … 1108 1164 reset_mbstring_encoding(); 1109 1165 1110 for ( $i = 0; $i < $string_length; $i++ ) {1166 for ( $i = 0; $i < $string_length; $i++ ) { 1111 1167 1112 1168 $value = ord( $utf8_string[ $i ] ); 1113 1169 1114 1170 if ( $value < 128 ) { 1115 if ( $length && ( $unicode_length >= $length ) ) 1171 if ( $length && ( $unicode_length >= $length ) ) { 1116 1172 break; 1117 $unicode .= chr($value); 1173 } 1174 $unicode .= chr( $value ); 1118 1175 $unicode_length++; 1119 1176 } else { … … 1130 1187 $values[] = $value; 1131 1188 1132 if ( $length && ( $unicode_length + ( $num_octets * 3) ) > $length )1189 if ( $length && ( $unicode_length + ( $num_octets * 3 ) ) > $length ) { 1133 1190 break; 1191 } 1134 1192 if ( count( $values ) == $num_octets ) { 1135 1193 for ( $j = 0; $j < $num_octets; $j++ ) { … … 1139 1197 $unicode_length += $num_octets * 3; 1140 1198 1141 $values = array();1199 $values = array(); 1142 1200 $num_octets = 1; 1143 1201 } … … 1535 1593 */ 1536 1594 function remove_accents( $string ) { 1537 if ( ! preg_match('/[\x80-\xff]/', $string) )1595 if ( ! preg_match( '/[\x80-\xff]/', $string ) ) { 1538 1596 return $string; 1539 1540 if (seems_utf8($string)) { 1597 } 1598 1599 if ( seems_utf8( $string ) ) { 1541 1600 $chars = array( 1542 // Decompositions for Latin-1 Supplement 1543 'ª' => 'a', 'º' => 'o', 1544 'À' => 'A', 'Á' => 'A', 1545 'Â' => 'A', 'Ã' => 'A', 1546 'Ä' => 'A', 'Å' => 'A', 1547 'Æ' => 'AE','Ç' => 'C', 1548 'È' => 'E', 'É' => 'E', 1549 'Ê' => 'E', 'Ë' => 'E', 1550 'Ì' => 'I', 'Í' => 'I', 1551 'Î' => 'I', 'Ï' => 'I', 1552 'Ð' => 'D', 'Ñ' => 'N', 1553 'Ò' => 'O', 'Ó' => 'O', 1554 'Ô' => 'O', 'Õ' => 'O', 1555 'Ö' => 'O', 'Ù' => 'U', 1556 'Ú' => 'U', 'Û' => 'U', 1557 'Ü' => 'U', 'Ý' => 'Y', 1558 'Þ' => 'TH','ß' => 's', 1559 'à' => 'a', 'á' => 'a', 1560 'â' => 'a', 'ã' => 'a', 1561 'ä' => 'a', 'å' => 'a', 1562 'æ' => 'ae','ç' => 'c', 1563 'è' => 'e', 'é' => 'e', 1564 'ê' => 'e', 'ë' => 'e', 1565 'ì' => 'i', 'í' => 'i', 1566 'î' => 'i', 'ï' => 'i', 1567 'ð' => 'd', 'ñ' => 'n', 1568 'ò' => 'o', 'ó' => 'o', 1569 'ô' => 'o', 'õ' => 'o', 1570 'ö' => 'o', 'ø' => 'o', 1571 'ù' => 'u', 'ú' => 'u', 1572 'û' => 'u', 'ü' => 'u', 1573 'ý' => 'y', 'þ' => 'th', 1574 'ÿ' => 'y', 'Ø' => 'O', 1575 // Decompositions for Latin Extended-A 1576 'Ā' => 'A', 'ā' => 'a', 1577 'Ă' => 'A', 'ă' => 'a', 1578 'Ą' => 'A', 'ą' => 'a', 1579 'Ć' => 'C', 'ć' => 'c', 1580 'Ĉ' => 'C', 'ĉ' => 'c', 1581 'Ċ' => 'C', 'ċ' => 'c', 1582 'Č' => 'C', 'č' => 'c', 1583 'Ď' => 'D', 'ď' => 'd', 1584 'Đ' => 'D', 'đ' => 'd', 1585 'Ē' => 'E', 'ē' => 'e', 1586 'Ĕ' => 'E', 'ĕ' => 'e', 1587 'Ė' => 'E', 'ė' => 'e', 1588 'Ę' => 'E', 'ę' => 'e', 1589 'Ě' => 'E', 'ě' => 'e', 1590 'Ĝ' => 'G', 'ĝ' => 'g', 1591 'Ğ' => 'G', 'ğ' => 'g', 1592 'Ġ' => 'G', 'ġ' => 'g', 1593 'Ģ' => 'G', 'ģ' => 'g', 1594 'Ĥ' => 'H', 'ĥ' => 'h', 1595 'Ħ' => 'H', 'ħ' => 'h', 1596 'Ĩ' => 'I', 'ĩ' => 'i', 1597 'Ī' => 'I', 'ī' => 'i', 1598 'Ĭ' => 'I', 'ĭ' => 'i', 1599 'Į' => 'I', 'į' => 'i', 1600 'İ' => 'I', 'ı' => 'i', 1601 'IJ' => 'IJ','ij' => 'ij', 1602 'Ĵ' => 'J', 'ĵ' => 'j', 1603 'Ķ' => 'K', 'ķ' => 'k', 1604 'ĸ' => 'k', 'Ĺ' => 'L', 1605 'ĺ' => 'l', 'Ļ' => 'L', 1606 'ļ' => 'l', 'Ľ' => 'L', 1607 'ľ' => 'l', 'Ŀ' => 'L', 1608 'ŀ' => 'l', 'Ł' => 'L', 1609 'ł' => 'l', 'Ń' => 'N', 1610 'ń' => 'n', 'Ņ' => 'N', 1611 'ņ' => 'n', 'Ň' => 'N', 1612 'ň' => 'n', 'ʼn' => 'n', 1613 'Ŋ' => 'N', 'ŋ' => 'n', 1614 'Ō' => 'O', 'ō' => 'o', 1615 'Ŏ' => 'O', 'ŏ' => 'o', 1616 'Ő' => 'O', 'ő' => 'o', 1617 'Œ' => 'OE','œ' => 'oe', 1618 'Ŕ' => 'R','ŕ' => 'r', 1619 'Ŗ' => 'R','ŗ' => 'r', 1620 'Ř' => 'R','ř' => 'r', 1621 'Ś' => 'S','ś' => 's', 1622 'Ŝ' => 'S','ŝ' => 's', 1623 'Ş' => 'S','ş' => 's', 1624 'Š' => 'S', 'š' => 's', 1625 'Ţ' => 'T', 'ţ' => 't', 1626 'Ť' => 'T', 'ť' => 't', 1627 'Ŧ' => 'T', 'ŧ' => 't', 1628 'Ũ' => 'U', 'ũ' => 'u', 1629 'Ū' => 'U', 'ū' => 'u', 1630 'Ŭ' => 'U', 'ŭ' => 'u', 1631 'Ů' => 'U', 'ů' => 'u', 1632 'Ű' => 'U', 'ű' => 'u', 1633 'Ų' => 'U', 'ų' => 'u', 1634 'Ŵ' => 'W', 'ŵ' => 'w', 1635 'Ŷ' => 'Y', 'ŷ' => 'y', 1636 'Ÿ' => 'Y', 'Ź' => 'Z', 1637 'ź' => 'z', 'Ż' => 'Z', 1638 'ż' => 'z', 'Ž' => 'Z', 1639 'ž' => 'z', 'ſ' => 's', 1640 // Decompositions for Latin Extended-B 1641 'Ș' => 'S', 'ș' => 's', 1642 'Ț' => 'T', 'ț' => 't', 1643 // Euro Sign 1644 '€' => 'E', 1645 // GBP (Pound) Sign 1646 '£' => '', 1647 // Vowels with diacritic (Vietnamese) 1648 // unmarked 1649 'Ơ' => 'O', 'ơ' => 'o', 1650 'Ư' => 'U', 'ư' => 'u', 1651 // grave accent 1652 'Ầ' => 'A', 'ầ' => 'a', 1653 'Ằ' => 'A', 'ằ' => 'a', 1654 'Ề' => 'E', 'ề' => 'e', 1655 'Ồ' => 'O', 'ồ' => 'o', 1656 'Ờ' => 'O', 'ờ' => 'o', 1657 'Ừ' => 'U', 'ừ' => 'u', 1658 'Ỳ' => 'Y', 'ỳ' => 'y', 1659 // hook 1660 'Ả' => 'A', 'ả' => 'a', 1661 'Ẩ' => 'A', 'ẩ' => 'a', 1662 'Ẳ' => 'A', 'ẳ' => 'a', 1663 'Ẻ' => 'E', 'ẻ' => 'e', 1664 'Ể' => 'E', 'ể' => 'e', 1665 'Ỉ' => 'I', 'ỉ' => 'i', 1666 'Ỏ' => 'O', 'ỏ' => 'o', 1667 'Ổ' => 'O', 'ổ' => 'o', 1668 'Ở' => 'O', 'ở' => 'o', 1669 'Ủ' => 'U', 'ủ' => 'u', 1670 'Ử' => 'U', 'ử' => 'u', 1671 'Ỷ' => 'Y', 'ỷ' => 'y', 1672 // tilde 1673 'Ẫ' => 'A', 'ẫ' => 'a', 1674 'Ẵ' => 'A', 'ẵ' => 'a', 1675 'Ẽ' => 'E', 'ẽ' => 'e', 1676 'Ễ' => 'E', 'ễ' => 'e', 1677 'Ỗ' => 'O', 'ỗ' => 'o', 1678 'Ỡ' => 'O', 'ỡ' => 'o', 1679 'Ữ' => 'U', 'ữ' => 'u', 1680 'Ỹ' => 'Y', 'ỹ' => 'y', 1681 // acute accent 1682 'Ấ' => 'A', 'ấ' => 'a', 1683 'Ắ' => 'A', 'ắ' => 'a', 1684 'Ế' => 'E', 'ế' => 'e', 1685 'Ố' => 'O', 'ố' => 'o', 1686 'Ớ' => 'O', 'ớ' => 'o', 1687 'Ứ' => 'U', 'ứ' => 'u', 1688 // dot below 1689 'Ạ' => 'A', 'ạ' => 'a', 1690 'Ậ' => 'A', 'ậ' => 'a', 1691 'Ặ' => 'A', 'ặ' => 'a', 1692 'Ẹ' => 'E', 'ẹ' => 'e', 1693 'Ệ' => 'E', 'ệ' => 'e', 1694 'Ị' => 'I', 'ị' => 'i', 1695 'Ọ' => 'O', 'ọ' => 'o', 1696 'Ộ' => 'O', 'ộ' => 'o', 1697 'Ợ' => 'O', 'ợ' => 'o', 1698 'Ụ' => 'U', 'ụ' => 'u', 1699 'Ự' => 'U', 'ự' => 'u', 1700 'Ỵ' => 'Y', 'ỵ' => 'y', 1701 // Vowels with diacritic (Chinese, Hanyu Pinyin) 1702 'ɑ' => 'a', 1703 // macron 1704 'Ǖ' => 'U', 'ǖ' => 'u', 1705 // acute accent 1706 'Ǘ' => 'U', 'ǘ' => 'u', 1707 // caron 1708 'Ǎ' => 'A', 'ǎ' => 'a', 1709 'Ǐ' => 'I', 'ǐ' => 'i', 1710 'Ǒ' => 'O', 'ǒ' => 'o', 1711 'Ǔ' => 'U', 'ǔ' => 'u', 1712 'Ǚ' => 'U', 'ǚ' => 'u', 1713 // grave accent 1714 'Ǜ' => 'U', 'ǜ' => 'u', 1601 // Decompositions for Latin-1 Supplement 1602 'ª' => 'a', 1603 'º' => 'o', 1604 'À' => 'A', 1605 'Á' => 'A', 1606 'Â' => 'A', 1607 'Ã' => 'A', 1608 'Ä' => 'A', 1609 'Å' => 'A', 1610 'Æ' => 'AE', 1611 'Ç' => 'C', 1612 'È' => 'E', 1613 'É' => 'E', 1614 'Ê' => 'E', 1615 'Ë' => 'E', 1616 'Ì' => 'I', 1617 'Í' => 'I', 1618 'Î' => 'I', 1619 'Ï' => 'I', 1620 'Ð' => 'D', 1621 'Ñ' => 'N', 1622 'Ò' => 'O', 1623 'Ó' => 'O', 1624 'Ô' => 'O', 1625 'Õ' => 'O', 1626 'Ö' => 'O', 1627 'Ù' => 'U', 1628 'Ú' => 'U', 1629 'Û' => 'U', 1630 'Ü' => 'U', 1631 'Ý' => 'Y', 1632 'Þ' => 'TH', 1633 'ß' => 's', 1634 'à' => 'a', 1635 'á' => 'a', 1636 'â' => 'a', 1637 'ã' => 'a', 1638 'ä' => 'a', 1639 'å' => 'a', 1640 'æ' => 'ae', 1641 'ç' => 'c', 1642 'è' => 'e', 1643 'é' => 'e', 1644 'ê' => 'e', 1645 'ë' => 'e', 1646 'ì' => 'i', 1647 'í' => 'i', 1648 'î' => 'i', 1649 'ï' => 'i', 1650 'ð' => 'd', 1651 'ñ' => 'n', 1652 'ò' => 'o', 1653 'ó' => 'o', 1654 'ô' => 'o', 1655 'õ' => 'o', 1656 'ö' => 'o', 1657 'ø' => 'o', 1658 'ù' => 'u', 1659 'ú' => 'u', 1660 'û' => 'u', 1661 'ü' => 'u', 1662 'ý' => 'y', 1663 'þ' => 'th', 1664 'ÿ' => 'y', 1665 'Ø' => 'O', 1666 // Decompositions for Latin Extended-A 1667 'Ā' => 'A', 1668 'ā' => 'a', 1669 'Ă' => 'A', 1670 'ă' => 'a', 1671 'Ą' => 'A', 1672 'ą' => 'a', 1673 'Ć' => 'C', 1674 'ć' => 'c', 1675 'Ĉ' => 'C', 1676 'ĉ' => 'c', 1677 'Ċ' => 'C', 1678 'ċ' => 'c', 1679 'Č' => 'C', 1680 'č' => 'c', 1681 'Ď' => 'D', 1682 'ď' => 'd', 1683 'Đ' => 'D', 1684 'đ' => 'd', 1685 'Ē' => 'E', 1686 'ē' => 'e', 1687 'Ĕ' => 'E', 1688 'ĕ' => 'e', 1689 'Ė' => 'E', 1690 'ė' => 'e', 1691 'Ę' => 'E', 1692 'ę' => 'e', 1693 'Ě' => 'E', 1694 'ě' => 'e', 1695 'Ĝ' => 'G', 1696 'ĝ' => 'g', 1697 'Ğ' => 'G', 1698 'ğ' => 'g', 1699 'Ġ' => 'G', 1700 'ġ' => 'g', 1701 'Ģ' => 'G', 1702 'ģ' => 'g', 1703 'Ĥ' => 'H', 1704 'ĥ' => 'h', 1705 'Ħ' => 'H', 1706 'ħ' => 'h', 1707 'Ĩ' => 'I', 1708 'ĩ' => 'i', 1709 'Ī' => 'I', 1710 'ī' => 'i', 1711 'Ĭ' => 'I', 1712 'ĭ' => 'i', 1713 'Į' => 'I', 1714 'į' => 'i', 1715 'İ' => 'I', 1716 'ı' => 'i', 1717 'IJ' => 'IJ', 1718 'ij' => 'ij', 1719 'Ĵ' => 'J', 1720 'ĵ' => 'j', 1721 'Ķ' => 'K', 1722 'ķ' => 'k', 1723 'ĸ' => 'k', 1724 'Ĺ' => 'L', 1725 'ĺ' => 'l', 1726 'Ļ' => 'L', 1727 'ļ' => 'l', 1728 'Ľ' => 'L', 1729 'ľ' => 'l', 1730 'Ŀ' => 'L', 1731 'ŀ' => 'l', 1732 'Ł' => 'L', 1733 'ł' => 'l', 1734 'Ń' => 'N', 1735 'ń' => 'n', 1736 'Ņ' => 'N', 1737 'ņ' => 'n', 1738 'Ň' => 'N', 1739 'ň' => 'n', 1740 'ʼn' => 'n', 1741 'Ŋ' => 'N', 1742 'ŋ' => 'n', 1743 'Ō' => 'O', 1744 'ō' => 'o', 1745 'Ŏ' => 'O', 1746 'ŏ' => 'o', 1747 'Ő' => 'O', 1748 'ő' => 'o', 1749 'Œ' => 'OE', 1750 'œ' => 'oe', 1751 'Ŕ' => 'R', 1752 'ŕ' => 'r', 1753 'Ŗ' => 'R', 1754 'ŗ' => 'r', 1755 'Ř' => 'R', 1756 'ř' => 'r', 1757 'Ś' => 'S', 1758 'ś' => 's', 1759 'Ŝ' => 'S', 1760 'ŝ' => 's', 1761 'Ş' => 'S', 1762 'ş' => 's', 1763 'Š' => 'S', 1764 'š' => 's', 1765 'Ţ' => 'T', 1766 'ţ' => 't', 1767 'Ť' => 'T', 1768 'ť' => 't', 1769 'Ŧ' => 'T', 1770 'ŧ' => 't', 1771 'Ũ' => 'U', 1772 'ũ' => 'u', 1773 'Ū' => 'U', 1774 'ū' => 'u', 1775 'Ŭ' => 'U', 1776 'ŭ' => 'u', 1777 'Ů' => 'U', 1778 'ů' => 'u', 1779 'Ű' => 'U', 1780 'ű' => 'u', 1781 'Ų' => 'U', 1782 'ų' => 'u', 1783 'Ŵ' => 'W', 1784 'ŵ' => 'w', 1785 'Ŷ' => 'Y', 1786 'ŷ' => 'y', 1787 'Ÿ' => 'Y', 1788 'Ź' => 'Z', 1789 'ź' => 'z', 1790 'Ż' => 'Z', 1791 'ż' => 'z', 1792 'Ž' => 'Z', 1793 'ž' => 'z', 1794 'ſ' => 's', 1795 // Decompositions for Latin Extended-B 1796 'Ș' => 'S', 1797 'ș' => 's', 1798 'Ț' => 'T', 1799 'ț' => 't', 1800 // Euro Sign 1801 '€' => 'E', 1802 // GBP (Pound) Sign 1803 '£' => '', 1804 // Vowels with diacritic (Vietnamese) 1805 // unmarked 1806 'Ơ' => 'O', 1807 'ơ' => 'o', 1808 'Ư' => 'U', 1809 'ư' => 'u', 1810 // grave accent 1811 'Ầ' => 'A', 1812 'ầ' => 'a', 1813 'Ằ' => 'A', 1814 'ằ' => 'a', 1815 'Ề' => 'E', 1816 'ề' => 'e', 1817 'Ồ' => 'O', 1818 'ồ' => 'o', 1819 'Ờ' => 'O', 1820 'ờ' => 'o', 1821 'Ừ' => 'U', 1822 'ừ' => 'u', 1823 'Ỳ' => 'Y', 1824 'ỳ' => 'y', 1825 // hook 1826 'Ả' => 'A', 1827 'ả' => 'a', 1828 'Ẩ' => 'A', 1829 'ẩ' => 'a', 1830 'Ẳ' => 'A', 1831 'ẳ' => 'a', 1832 'Ẻ' => 'E', 1833 'ẻ' => 'e', 1834 'Ể' => 'E', 1835 'ể' => 'e', 1836 'Ỉ' => 'I', 1837 'ỉ' => 'i', 1838 'Ỏ' => 'O', 1839 'ỏ' => 'o', 1840 'Ổ' => 'O', 1841 'ổ' => 'o', 1842 'Ở' => 'O', 1843 'ở' => 'o', 1844 'Ủ' => 'U', 1845 'ủ' => 'u', 1846 'Ử' => 'U', 1847 'ử' => 'u', 1848 'Ỷ' => 'Y', 1849 'ỷ' => 'y', 1850 // tilde 1851 'Ẫ' => 'A', 1852 'ẫ' => 'a', 1853 'Ẵ' => 'A', 1854 'ẵ' => 'a', 1855 'Ẽ' => 'E', 1856 'ẽ' => 'e', 1857 'Ễ' => 'E', 1858 'ễ' => 'e', 1859 'Ỗ' => 'O', 1860 'ỗ' => 'o', 1861 'Ỡ' => 'O', 1862 'ỡ' => 'o', 1863 'Ữ' => 'U', 1864 'ữ' => 'u', 1865 'Ỹ' => 'Y', 1866 'ỹ' => 'y', 1867 // acute accent 1868 'Ấ' => 'A', 1869 'ấ' => 'a', 1870 'Ắ' => 'A', 1871 'ắ' => 'a', 1872 'Ế' => 'E', 1873 'ế' => 'e', 1874 'Ố' => 'O', 1875 'ố' => 'o', 1876 'Ớ' => 'O', 1877 'ớ' => 'o', 1878 'Ứ' => 'U', 1879 'ứ' => 'u', 1880 // dot below 1881 'Ạ' => 'A', 1882 'ạ' => 'a', 1883 'Ậ' => 'A', 1884 'ậ' => 'a', 1885 'Ặ' => 'A', 1886 'ặ' => 'a', 1887 'Ẹ' => 'E', 1888 'ẹ' => 'e', 1889 'Ệ' => 'E', 1890 'ệ' => 'e', 1891 'Ị' => 'I', 1892 'ị' => 'i', 1893 'Ọ' => 'O', 1894 'ọ' => 'o', 1895 'Ộ' => 'O', 1896 'ộ' => 'o', 1897 'Ợ' => 'O', 1898 'ợ' => 'o', 1899 'Ụ' => 'U', 1900 'ụ' => 'u', 1901 'Ự' => 'U', 1902 'ự' => 'u', 1903 'Ỵ' => 'Y', 1904 'ỵ' => 'y', 1905 // Vowels with diacritic (Chinese, Hanyu Pinyin) 1906 'ɑ' => 'a', 1907 // macron 1908 'Ǖ' => 'U', 1909 'ǖ' => 'u', 1910 // acute accent 1911 'Ǘ' => 'U', 1912 'ǘ' => 'u', 1913 // caron 1914 'Ǎ' => 'A', 1915 'ǎ' => 'a', 1916 'Ǐ' => 'I', 1917 'ǐ' => 'i', 1918 'Ǒ' => 'O', 1919 'ǒ' => 'o', 1920 'Ǔ' => 'U', 1921 'ǔ' => 'u', 1922 'Ǚ' => 'U', 1923 'ǚ' => 'u', 1924 // grave accent 1925 'Ǜ' => 'U', 1926 'ǜ' => 'u', 1715 1927 ); 1716 1928 … … 1719 1931 1720 1932 if ( 'de_DE' == $locale || 'de_DE_formal' == $locale || 'de_CH' == $locale || 'de_CH_informal' == $locale ) { 1721 $chars[ 'Ä'] = 'Ae';1722 $chars[ 'ä'] = 'ae';1723 $chars[ 'Ö'] = 'Oe';1724 $chars[ 'ö'] = 'oe';1725 $chars[ 'Ü'] = 'Ue';1726 $chars[ 'ü'] = 'ue';1727 $chars[ 'ß'] = 'ss';1933 $chars['Ä'] = 'Ae'; 1934 $chars['ä'] = 'ae'; 1935 $chars['Ö'] = 'Oe'; 1936 $chars['ö'] = 'oe'; 1937 $chars['Ü'] = 'Ue'; 1938 $chars['ü'] = 'ue'; 1939 $chars['ß'] = 'ss'; 1728 1940 } elseif ( 'da_DK' === $locale ) { 1729 $chars[ 'Æ'] = 'Ae';1730 $chars[ 'æ'] = 'ae';1731 $chars[ 'Ø'] = 'Oe';1732 $chars[ 'ø'] = 'oe';1733 $chars[ 'Å'] = 'Aa';1734 $chars[ 'å'] = 'aa';1941 $chars['Æ'] = 'Ae'; 1942 $chars['æ'] = 'ae'; 1943 $chars['Ø'] = 'Oe'; 1944 $chars['ø'] = 'oe'; 1945 $chars['Å'] = 'Aa'; 1946 $chars['å'] = 'aa'; 1735 1947 } elseif ( 'ca' === $locale ) { 1736 $chars[ 'l·l'] = 'll';1948 $chars['l·l'] = 'll'; 1737 1949 } elseif ( 'sr_RS' === $locale || 'bs_BA' === $locale ) { 1738 $chars[ 'Đ'] = 'DJ';1739 $chars[ 'đ'] = 'dj';1740 } 1741 1742 $string = strtr( $string, $chars);1950 $chars['Đ'] = 'DJ'; 1951 $chars['đ'] = 'dj'; 1952 } 1953 1954 $string = strtr( $string, $chars ); 1743 1955 } else { 1744 1956 $chars = array(); 1745 1957 // Assume ISO-8859-1 if not UTF-8 1746 1958 $chars['in'] = "\x80\x83\x8a\x8e\x9a\x9e" 1747 . "\x9f\xa2\xa5\xb5\xc0\xc1\xc2"1748 . "\xc3\xc4\xc5\xc7\xc8\xc9\xca"1749 . "\xcb\xcc\xcd\xce\xcf\xd1\xd2"1750 . "\xd3\xd4\xd5\xd6\xd8\xd9\xda"1751 . "\xdb\xdc\xdd\xe0\xe1\xe2\xe3"1752 . "\xe4\xe5\xe7\xe8\xe9\xea\xeb"1753 . "\xec\xed\xee\xef\xf1\xf2\xf3"1754 . "\xf4\xf5\xf6\xf8\xf9\xfa\xfb"1755 . "\xfc\xfd\xff";1756 1757 $chars['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy";1758 1759 $string = strtr($string, $chars['in'], $chars['out']);1760 $double_chars = array();1761 $double_chars['in'] = array("\x8c", "\x9c", "\xc6", "\xd0", "\xde", "\xdf", "\xe6", "\xf0", "\xfe");1762 $double_chars['out'] = array( 'OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th');1763 $string = str_replace($double_chars['in'], $double_chars['out'], $string);1959 . "\x9f\xa2\xa5\xb5\xc0\xc1\xc2" 1960 . "\xc3\xc4\xc5\xc7\xc8\xc9\xca" 1961 . "\xcb\xcc\xcd\xce\xcf\xd1\xd2" 1962 . "\xd3\xd4\xd5\xd6\xd8\xd9\xda" 1963 . "\xdb\xdc\xdd\xe0\xe1\xe2\xe3" 1964 . "\xe4\xe5\xe7\xe8\xe9\xea\xeb" 1965 . "\xec\xed\xee\xef\xf1\xf2\xf3" 1966 . "\xf4\xf5\xf6\xf8\xf9\xfa\xfb" 1967 . "\xfc\xfd\xff"; 1968 1969 $chars['out'] = 'EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy'; 1970 1971 $string = strtr( $string, $chars['in'], $chars['out'] ); 1972 $double_chars = array(); 1973 $double_chars['in'] = array( "\x8c", "\x9c", "\xc6", "\xd0", "\xde", "\xdf", "\xe6", "\xf0", "\xfe" ); 1974 $double_chars['out'] = array( 'OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th' ); 1975 $string = str_replace( $double_chars['in'], $double_chars['out'], $string ); 1764 1976 } 1765 1977 … … 1783 1995 */ 1784 1996 function sanitize_file_name( $filename ) { 1785 $filename_raw = $filename;1786 $special_chars = array( "?", "[", "]", "/", "\\", "=", "<", ">", ":", ";", ",", "'", "\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", "!", "{", "}", "%", "+", chr(0));1997 $filename_raw = $filename; 1998 $special_chars = array( '?', '[', ']', '/', '\\', '=', '<', '>', ':', ';', ',', "'", '"', '&', '$', '#', '*', '(', ')', '|', '~', '`', '!', '{', '}', '%', '+', chr( 0 ) ); 1787 1999 /** 1788 2000 * Filters the list of characters to remove from a filename. … … 1794 2006 */ 1795 2007 $special_chars = apply_filters( 'sanitize_file_name_chars', $special_chars, $filename_raw ); 1796 $filename = preg_replace( "#\x{00a0}#siu", ' ', $filename );1797 $filename = str_replace( $special_chars, '', $filename );1798 $filename = str_replace( array( '%20', '+' ), '-', $filename );1799 $filename = preg_replace( '/[\r\n\t -]+/', '-', $filename );1800 $filename = trim( $filename, '.-_' );2008 $filename = preg_replace( "#\x{00a0}#siu", ' ', $filename ); 2009 $filename = str_replace( $special_chars, '', $filename ); 2010 $filename = str_replace( array( '%20', '+' ), '-', $filename ); 2011 $filename = preg_replace( '/[\r\n\t -]+/', '-', $filename ); 2012 $filename = trim( $filename, '.-_' ); 1801 2013 1802 2014 if ( false === strpos( $filename, '.' ) ) { 1803 2015 $mime_types = wp_get_mime_types(); 1804 $filetype = wp_check_filetype( 'test.' . $filename, $mime_types );2016 $filetype = wp_check_filetype( 'test.' . $filename, $mime_types ); 1805 2017 if ( $filetype['ext'] === $filename ) { 1806 2018 $filename = 'unnamed-file.' . $filetype['ext']; … … 1809 2021 1810 2022 // Split the filename into a base and extension[s] 1811 $parts = explode( '.', $filename);2023 $parts = explode( '.', $filename ); 1812 2024 1813 2025 // Return if only one extension … … 1825 2037 1826 2038 // Process multiple extensions 1827 $filename = array_shift($parts);1828 $extension = array_pop( $parts);1829 $mimes = get_allowed_mime_types();2039 $filename = array_shift( $parts ); 2040 $extension = array_pop( $parts ); 2041 $mimes = get_allowed_mime_types(); 1830 2042 1831 2043 /* … … 1833 2045 * if they are a 2 - 5 character long alpha string not in the extension whitelist. 1834 2046 */ 1835 foreach ( (array) $parts as $part ) {2047 foreach ( (array) $parts as $part ) { 1836 2048 $filename .= '.' . $part; 1837 2049 1838 if ( preg_match( "/^[a-zA-Z]{2,5}\d?$/", $part) ) {2050 if ( preg_match( '/^[a-zA-Z]{2,5}\d?$/', $part ) ) { 1839 2051 $allowed = false; 1840 2052 foreach ( $mimes as $ext_preg => $mime_match ) { … … 1845 2057 } 1846 2058 } 1847 if ( ! $allowed )2059 if ( ! $allowed ) { 1848 2060 $filename .= '_'; 2061 } 1849 2062 } 1850 2063 } 1851 2064 $filename .= '.' . $extension; 1852 2065 /** This filter is documented in wp-includes/formatting.php */ 1853 return apply_filters( 'sanitize_file_name', $filename, $filename_raw);2066 return apply_filters( 'sanitize_file_name', $filename, $filename_raw ); 1854 2067 } 1855 2068 … … 1870 2083 function sanitize_user( $username, $strict = false ) { 1871 2084 $raw_username = $username; 1872 $username = wp_strip_all_tags( $username );1873 $username = remove_accents( $username );2085 $username = wp_strip_all_tags( $username ); 2086 $username = remove_accents( $username ); 1874 2087 // Kill octets 1875 2088 $username = preg_replace( '|%([a-fA-F0-9][a-fA-F0-9])|', '', $username ); … … 1877 2090 1878 2091 // If strict, reduce to ASCII for max portability. 1879 if ( $strict ) 2092 if ( $strict ) { 1880 2093 $username = preg_replace( '|[^a-z0-9 _.\-@]|i', '', $username ); 2094 } 1881 2095 1882 2096 $username = trim( $username ); … … 1908 2122 function sanitize_key( $key ) { 1909 2123 $raw_key = $key; 1910 $key = strtolower( $key );1911 $key = preg_replace( '/[^a-z0-9_\-]/', '', $key );2124 $key = strtolower( $key ); 2125 $key = preg_replace( '/[^a-z0-9_\-]/', '', $key ); 1912 2126 1913 2127 /** … … 1939 2153 $raw_title = $title; 1940 2154 1941 if ( 'save' == $context ) 1942 $title = remove_accents($title); 2155 if ( 'save' == $context ) { 2156 $title = remove_accents( $title ); 2157 } 1943 2158 1944 2159 /** … … 1953 2168 $title = apply_filters( 'sanitize_title', $title, $raw_title, $context ); 1954 2169 1955 if ( '' === $title || false === $title ) 2170 if ( '' === $title || false === $title ) { 1956 2171 $title = $fallback_title; 2172 } 1957 2173 1958 2174 return $title; … … 1987 2203 */ 1988 2204 function sanitize_title_with_dashes( $title, $raw_title = '', $context = 'display' ) { 1989 $title = strip_tags( $title);2205 $title = strip_tags( $title ); 1990 2206 // Preserve escaped octets. 1991 $title = preg_replace( '|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title);2207 $title = preg_replace( '|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title ); 1992 2208 // Remove percent signs that are not part of an octet. 1993 $title = str_replace( '%', '', $title);2209 $title = str_replace( '%', '', $title ); 1994 2210 // Restore octets. 1995 $title = preg_replace( '|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title);1996 1997 if ( seems_utf8($title)) {1998 if ( function_exists('mb_strtolower')) {1999 $title = mb_strtolower( $title, 'UTF-8');2000 } 2001 $title = utf8_uri_encode( $title, 200);2002 } 2003 2004 $title = strtolower( $title);2211 $title = preg_replace( '|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title ); 2212 2213 if ( seems_utf8( $title ) ) { 2214 if ( function_exists( 'mb_strtolower' ) ) { 2215 $title = mb_strtolower( $title, 'UTF-8' ); 2216 } 2217 $title = utf8_uri_encode( $title, 200 ); 2218 } 2219 2220 $title = strtolower( $title ); 2005 2221 2006 2222 if ( 'save' == $context ) { … … 2013 2229 2014 2230 // Strip these characters entirely 2015 $title = str_replace( array( 2016 // iexcl and iquest 2017 '%c2%a1', '%c2%bf', 2018 // angle quotes 2019 '%c2%ab', '%c2%bb', '%e2%80%b9', '%e2%80%ba', 2020 // curly quotes 2021 '%e2%80%98', '%e2%80%99', '%e2%80%9c', '%e2%80%9d', 2022 '%e2%80%9a', '%e2%80%9b', '%e2%80%9e', '%e2%80%9f', 2023 // copy, reg, deg, hellip and trade 2024 '%c2%a9', '%c2%ae', '%c2%b0', '%e2%80%a6', '%e2%84%a2', 2025 // acute accents 2026 '%c2%b4', '%cb%8a', '%cc%81', '%cd%81', 2027 // grave accent, macron, caron 2028 '%cc%80', '%cc%84', '%cc%8c', 2029 ), '', $title ); 2231 $title = str_replace( 2232 array( 2233 // iexcl and iquest 2234 '%c2%a1', 2235 '%c2%bf', 2236 // angle quotes 2237 '%c2%ab', 2238 '%c2%bb', 2239 '%e2%80%b9', 2240 '%e2%80%ba', 2241 // curly quotes 2242 '%e2%80%98', 2243 '%e2%80%99', 2244 '%e2%80%9c', 2245 '%e2%80%9d', 2246 '%e2%80%9a', 2247 '%e2%80%9b', 2248 '%e2%80%9e', 2249 '%e2%80%9f', 2250 // copy, reg, deg, hellip and trade 2251 '%c2%a9', 2252 '%c2%ae', 2253 '%c2%b0', 2254 '%e2%80%a6', 2255 '%e2%84%a2', 2256 // acute accents 2257 '%c2%b4', 2258 '%cb%8a', 2259 '%cc%81', 2260 '%cd%81', 2261 // grave accent, macron, caron 2262 '%cc%80', 2263 '%cc%84', 2264 '%cc%8c', 2265 ), '', $title 2266 ); 2030 2267 2031 2268 // Convert times to x … … 2033 2270 } 2034 2271 2035 $title = preg_replace( '/&.+?;/', '', $title); // kill entities2036 $title = str_replace( '.', '-', $title);2037 2038 $title = preg_replace( '/[^%a-z0-9 _-]/', '', $title);2039 $title = preg_replace( '/\s+/', '-', $title);2040 $title = preg_replace( '|-+|', '-', $title);2041 $title = trim( $title, '-');2272 $title = preg_replace( '/&.+?;/', '', $title ); // kill entities 2273 $title = str_replace( '.', '-', $title ); 2274 2275 $title = preg_replace( '/[^%a-z0-9 _-]/', '', $title ); 2276 $title = preg_replace( '/\s+/', '-', $title ); 2277 $title = preg_replace( '|-+|', '-', $title ); 2278 $title = trim( $title, '-' ); 2042 2279 2043 2280 return $title; … … 2076 2313 * @param string $class The classname to be sanitized 2077 2314 * @param string $fallback Optional. The value to return if the sanitization ends up as an empty string. 2078 * 2315 * Defaults to an empty string. 2079 2316 * @return string The sanitized value 2080 2317 */ … … 2163 2400 '' => '', 2164 2401 'ž' => 'ž', 2165 'Ÿ' => 'Ÿ' 2402 'Ÿ' => 'Ÿ', 2166 2403 ); 2167 2404 … … 2183 2420 */ 2184 2421 function balanceTags( $text, $force = false ) { 2185 if ( $force || get_option( 'use_balanceTags') == 1 ) {2422 if ( $force || get_option( 'use_balanceTags' ) == 1 ) { 2186 2423 return force_balance_tags( $text ); 2187 2424 } else { … … 2201 2438 * @todo Make better - change loop condition to $text in 1.2 2202 2439 * @internal Modified by Scott Reilly (coffee2code) 02 Aug 2004 2203 * 2204 * 2205 * 2440 * 1.1 Fixed handling of append/stack pop order of end text 2441 * Added Cleaning Hooks 2442 * 1.0 First Version 2206 2443 * 2207 2444 * @param string $text Text to be balanced. … … 2209 2446 */ 2210 2447 function force_balance_tags( $text ) { 2211 $tagstack = array();2448 $tagstack = array(); 2212 2449 $stacksize = 0; 2213 $tagqueue = '';2214 $newtext = '';2450 $tagqueue = ''; 2451 $newtext = ''; 2215 2452 // Known single-entity/self-closing tags 2216 2453 $single_tags = array( 'area', 'base', 'basefont', 'br', 'col', 'command', 'embed', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param', 'source' ); … … 2219 2456 2220 2457 // WP bug fix for comments - in case you REALLY meant to type '< !--' 2221 $text = str_replace( '< !--', '< !--', $text);2458 $text = str_replace( '< !--', '< !--', $text ); 2222 2459 // WP bug fix for LOVE <3 (and other situations with '<' before a number) 2223 $text = preg_replace( '#<([0-9]{1})#', '<$1', $text);2224 2225 while ( preg_match( "/<(\/?[\w:]*)\s*([^>]*)>/", $text, $regex) ) {2460 $text = preg_replace( '#<([0-9]{1})#', '<$1', $text ); 2461 2462 while ( preg_match( '/<(\/?[\w:]*)\s*([^>]*)>/', $text, $regex ) ) { 2226 2463 $newtext .= $tagqueue; 2227 2464 2228 $i = strpos( $text, $regex[0]);2229 $l = strlen( $regex[0]);2465 $i = strpos( $text, $regex[0] ); 2466 $l = strlen( $regex[0] ); 2230 2467 2231 2468 // clear the shifter 2232 2469 $tagqueue = ''; 2233 2470 // Pop or Push 2234 if ( isset( $regex[1][0]) && '/' == $regex[1][0] ) { // End Tag2235 $tag = strtolower( substr($regex[1],1));2471 if ( isset( $regex[1][0] ) && '/' == $regex[1][0] ) { // End Tag 2472 $tag = strtolower( substr( $regex[1], 1 ) ); 2236 2473 // if too many closing tags 2237 2474 if ( $stacksize <= 0 ) { 2238 2475 $tag = ''; 2239 2476 // or close to be safe $tag = '/' . $tag; 2240 } 2241 // if stacktop value = tag close value then pop 2242 elseif ( $tagstack[$stacksize - 1] == $tag ) { // found closing tag 2477 } // if stacktop value = tag close value then pop 2478 elseif ( $tagstack[ $stacksize - 1 ] == $tag ) { // found closing tag 2243 2479 $tag = '</' . $tag . '>'; // Close Tag 2244 2480 // Pop … … 2246 2482 $stacksize--; 2247 2483 } else { // closing tag not at top, search for it 2248 for ( $j = $stacksize -1; $j >= 0; $j-- ) {2249 if ( $tagstack[ $j] == $tag ) {2250 // add tag to tagqueue2251 for ( $k = $stacksize -1; $k >= $j; $k--) {2484 for ( $j = $stacksize - 1; $j >= 0; $j-- ) { 2485 if ( $tagstack[ $j ] == $tag ) { 2486 // add tag to tagqueue 2487 for ( $k = $stacksize - 1; $k >= $j; $k-- ) { 2252 2488 $tagqueue .= '</' . array_pop( $tagstack ) . '>'; 2253 2489 $stacksize--; … … 2259 2495 } 2260 2496 } else { // Begin Tag 2261 $tag = strtolower( $regex[1]);2497 $tag = strtolower( $regex[1] ); 2262 2498 2263 2499 // Tag Cleaning … … 2266 2502 if ( '' == $tag ) { 2267 2503 // do nothing 2268 } 2269 // ElseIf it presents itself as a self-closing tag... 2504 } // ElseIf it presents itself as a self-closing tag... 2270 2505 elseif ( substr( $regex[2], -1 ) == '/' ) { 2271 2506 // ...but it isn't a known single-entity self-closing tag, then don't let it be treated as such and 2272 2507 // immediately close it with a closing tag (the tag will encapsulate no text as a result) 2273 if ( ! in_array( $tag, $single_tags ) ) 2508 if ( ! in_array( $tag, $single_tags ) ) { 2274 2509 $regex[2] = trim( substr( $regex[2], 0, -1 ) ) . "></$tag"; 2275 }2276 // ElseIf it's a known single-entity tag but it doesn't close itself, do so2277 elseif ( in_array( $tag, $single_tags) ) {2510 } 2511 } // ElseIf it's a known single-entity tag but it doesn't close itself, do so 2512 elseif ( in_array( $tag, $single_tags ) ) { 2278 2513 $regex[2] .= '/'; 2279 } 2280 // Else it's not a single-entity tag 2514 } // Else it's not a single-entity tag 2281 2515 else { 2282 2516 // If the top of the stack is the same as the tag we want to push, close previous tag 2283 if ( $stacksize > 0 && ! in_array($tag, $nestable_tags) && $tagstack[$stacksize - 1] == $tag ) {2517 if ( $stacksize > 0 && ! in_array( $tag, $nestable_tags ) && $tagstack[ $stacksize - 1 ] == $tag ) { 2284 2518 $tagqueue = '</' . array_pop( $tagstack ) . '>'; 2285 2519 $stacksize--; … … 2290 2524 // Attributes 2291 2525 $attributes = $regex[2]; 2292 if ( ! empty( $attributes ) && $attributes[0] != '>' ) 2526 if ( ! empty( $attributes ) && $attributes[0] != '>' ) { 2293 2527 $attributes = ' ' . $attributes; 2528 } 2294 2529 2295 2530 $tag = '<' . $tag . $attributes . '>'; 2296 2531 //If already queuing a close tag, then put this tag on, too 2297 if ( ! empty($tagqueue) ) {2532 if ( ! empty( $tagqueue ) ) { 2298 2533 $tagqueue .= $tag; 2299 $tag = '';2534 $tag = ''; 2300 2535 } 2301 2536 } 2302 $newtext .= substr( $text, 0, $i) . $tag;2303 $text = substr($text, $i + $l);2537 $newtext .= substr( $text, 0, $i ) . $tag; 2538 $text = substr( $text, $i + $l ); 2304 2539 } 2305 2540 … … 2311 2546 2312 2547 // Empty Stack 2313 while ( $x = array_pop($tagstack) )2548 while ( $x = array_pop( $tagstack ) ) { 2314 2549 $newtext .= '</' . $x . '>'; // Add remaining tags to close 2550 } 2315 2551 2316 2552 // WP fix for the bug with HTML comments 2317 $newtext = str_replace( "< !--","<!--",$newtext);2318 $newtext = str_replace( "< !--","< !--",$newtext);2553 $newtext = str_replace( '< !--', '<!--', $newtext ); 2554 $newtext = str_replace( '< !--', '< !--', $newtext ); 2319 2555 2320 2556 return $newtext; … … 2346 2582 */ 2347 2583 $content = apply_filters( 'format_to_edit', $content ); 2348 if ( ! $rich_text ) 2584 if ( ! $rich_text ) { 2349 2585 $content = esc_textarea( $content ); 2586 } 2350 2587 return $content; 2351 2588 } … … 2381 2618 */ 2382 2619 function backslashit( $string ) { 2383 if ( isset( $string[0] ) && $string[0] >= '0' && $string[0] <= '9' ) 2620 if ( isset( $string[0] ) && $string[0] >= '0' && $string[0] <= '9' ) { 2384 2621 $string = '\\\\' . $string; 2622 } 2385 2623 return addcslashes( $string, 'A..Za..z' ); 2386 2624 } … … 2430 2668 * @return string Returns a string escaped with slashes. 2431 2669 */ 2432 function addslashes_gpc($gpc) { 2433 if ( get_magic_quotes_gpc() ) 2434 $gpc = stripslashes($gpc); 2435 2436 return wp_slash($gpc); 2670 function addslashes_gpc( $gpc ) { 2671 if ( get_magic_quotes_gpc() ) { 2672 $gpc = stripslashes( $gpc ); 2673 } 2674 2675 return wp_slash( $gpc ); 2437 2676 } 2438 2677 … … 2511 2750 $j = rand( 0, 1 + $hex_encoding ); 2512 2751 if ( $j == 0 ) { 2513 $email_no_spam_address .= '&#' . ord( $email_address[ $i] ) . ';';2752 $email_no_spam_address .= '&#' . ord( $email_address[ $i ] ) . ';'; 2514 2753 } elseif ( $j == 1 ) { 2515 $email_no_spam_address .= $email_address[ $i];2754 $email_no_spam_address .= $email_address[ $i ]; 2516 2755 } elseif ( $j == 2 ) { 2517 $email_no_spam_address .= '%' . zeroise( dechex( ord( $email_address[ $i] ) ), 2 );2756 $email_no_spam_address .= '%' . zeroise( dechex( ord( $email_address[ $i ] ) ), 2 ); 2518 2757 } 2519 2758 } … … 2539 2778 // If the trailing character is a closing parethesis, and the URL has an opening parenthesis in it, add the closing parenthesis to the URL. 2540 2779 // Then we can let the parenthesis balancer do its thing below. 2541 $url .= $matches[3];2780 $url .= $matches[3]; 2542 2781 $suffix = ''; 2543 2782 } else { … … 2548 2787 while ( substr_count( $url, '(' ) < substr_count( $url, ')' ) ) { 2549 2788 $suffix = strrchr( $url, ')' ) . $suffix; 2550 $url = substr( $url, 0, strrpos( $url, ')' ) );2551 } 2552 2553 $url = esc_url( $url);2554 if ( empty( $url) )2789 $url = substr( $url, 0, strrpos( $url, ')' ) ); 2790 } 2791 2792 $url = esc_url( $url ); 2793 if ( empty( $url ) ) { 2555 2794 return $matches[0]; 2795 } 2556 2796 2557 2797 return $matches[1] . "<a href=\"$url\" rel=\"nofollow\">$url</a>" . $suffix; … … 2570 2810 */ 2571 2811 function _make_web_ftp_clickable_cb( $matches ) { 2572 $ret = '';2812 $ret = ''; 2573 2813 $dest = $matches[2]; 2574 2814 $dest = 'http://' . $dest; 2575 2815 2576 2816 // removed trailing [.,;:)] from URL 2577 if ( in_array( substr( $dest, -1), array('.', ',', ';', ':', ')') ) === true ) {2578 $ret = substr($dest, -1);2579 $dest = substr( $dest, 0, strlen($dest)-1);2580 } 2581 2582 $dest = esc_url( $dest);2583 if ( empty( $dest) )2817 if ( in_array( substr( $dest, -1 ), array( '.', ',', ';', ':', ')' ) ) === true ) { 2818 $ret = substr( $dest, -1 ); 2819 $dest = substr( $dest, 0, strlen( $dest ) - 1 ); 2820 } 2821 2822 $dest = esc_url( $dest ); 2823 if ( empty( $dest ) ) { 2584 2824 return $matches[0]; 2825 } 2585 2826 2586 2827 return $matches[1] . "<a href=\"$dest\" rel=\"nofollow\">$dest</a>$ret"; … … 2615 2856 */ 2616 2857 function make_clickable( $text ) { 2617 $r = '';2618 $textarr = preg_split( '/(<[^<>]+>)/', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); // split out HTML tags2858 $r = ''; 2859 $textarr = preg_split( '/(<[^<>]+>)/', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); // split out HTML tags 2619 2860 $nested_code_pre = 0; // Keep track of how many levels link is nested inside <pre> or <code> 2620 2861 foreach ( $textarr as $piece ) { 2621 2862 2622 if ( preg_match( '|^<code[\s>]|i', $piece ) || preg_match( '|^<pre[\s>]|i', $piece ) || preg_match( '|^<script[\s>]|i', $piece ) || preg_match( '|^<style[\s>]|i', $piece ) ) 2863 if ( preg_match( '|^<code[\s>]|i', $piece ) || preg_match( '|^<pre[\s>]|i', $piece ) || preg_match( '|^<script[\s>]|i', $piece ) || preg_match( '|^<style[\s>]|i', $piece ) ) { 2623 2864 $nested_code_pre++; 2624 elseif ( $nested_code_pre && ( '</code>' === strtolower( $piece ) || '</pre>' === strtolower( $piece ) || '</script>' === strtolower( $piece ) || '</style>' === strtolower( $piece ) ) )2865 } elseif ( $nested_code_pre && ( '</code>' === strtolower( $piece ) || '</pre>' === strtolower( $piece ) || '</script>' === strtolower( $piece ) || '</style>' === strtolower( $piece ) ) ) { 2625 2866 $nested_code_pre--; 2867 } 2626 2868 2627 2869 if ( $nested_code_pre || empty( $piece ) || ( $piece[0] === '<' && ! preg_match( '|^<\s*[\w]{1,20}+://|', $piece ) ) ) { … … 2656 2898 (\)?) # 3: Trailing closing parenthesis (for parethesis balancing post processing) 2657 2899 ~xS'; // The regex is a non-anchored pattern and does not have a single fixed starting character. 2658 2900 // Tell PCRE to spend more time optimizing since, when used on a page load, it will probably be used several times. 2659 2901 2660 2902 $ret = preg_replace_callback( $url_clickable, '_make_url_clickable_cb', $ret ); … … 2664 2906 2665 2907 $ret = substr( $ret, 1, -1 ); // Remove our whitespace padding. 2666 $r .= $ret;2908 $r .= $ret; 2667 2909 } 2668 2910 } 2669 2911 2670 2912 // Cleanup of accidental links within links 2671 return preg_replace( '#(<a([ \r\n\t]+[^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i', "$1$3</a>", $r );2913 return preg_replace( '#(<a([ \r\n\t]+[^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i', '$1$3</a>', $r ); 2672 2914 } 2673 2915 … … 2716 2958 } 2717 2959 2718 $chunks[] = substr( $string, 0, $pos + 1 );2719 $string = substr( $string, $pos + 1 );2960 $chunks[] = substr( $string, 0, $pos + 1 ); 2961 $string = substr( $string, $pos + 1 ); 2720 2962 $string_nullspace = substr( $string_nullspace, $pos + 1 ); 2721 2963 } … … 2738 2980 function wp_rel_nofollow( $text ) { 2739 2981 // This is a pre save filter, so text is already escaped. 2740 $text = stripslashes( $text);2741 $text = preg_replace_callback( '|<a (.+?)>|i', 'wp_rel_nofollow_callback', $text);2982 $text = stripslashes( $text ); 2983 $text = preg_replace_callback( '|<a (.+?)>|i', 'wp_rel_nofollow_callback', $text ); 2742 2984 return wp_slash( $text ); 2743 2985 } … … 2800 3042 global $wpsmiliestrans; 2801 3043 2802 if ( count( $matches ) == 0 ) 3044 if ( count( $matches ) == 0 ) { 2803 3045 return ''; 3046 } 2804 3047 2805 3048 $smiley = trim( reset( $matches ) ); 2806 $img = $wpsmiliestrans[ $smiley ];2807 2808 $matches = array();2809 $ext = preg_match( '/\.([^.]+)$/', $img, $matches ) ? strtolower( $matches[1] ) : false;3049 $img = $wpsmiliestrans[ $smiley ]; 3050 3051 $matches = array(); 3052 $ext = preg_match( '/\.([^.]+)$/', $img, $matches ) ? strtolower( $matches[1] ) : false; 2810 3053 $image_exts = array( 'jpg', 'jpeg', 'jpe', 'gif', 'png' ); 2811 3054 … … 2848 3091 // HTML loop taken from texturize function, could possible be consolidated 2849 3092 $textarr = preg_split( '/(<.*>)/U', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); // capture the tags as well as in between 2850 $stop = count( $textarr );// loop stuff3093 $stop = count( $textarr );// loop stuff 2851 3094 2852 3095 // Ignore proessing of specific tags 2853 $tags_to_ignore = 'code|pre|style|script|textarea';3096 $tags_to_ignore = 'code|pre|style|script|textarea'; 2854 3097 $ignore_block_element = ''; 2855 3098 2856 3099 for ( $i = 0; $i < $stop; $i++ ) { 2857 $content = $textarr[ $i];3100 $content = $textarr[ $i ]; 2858 3101 2859 3102 // If we're in an ignore block, wait until we find its closing tag 2860 if ( '' == $ignore_block_element && preg_match( '/^<(' . $tags_to_ignore . ')>/', $content, $matches ) ) 3103 if ( '' == $ignore_block_element && preg_match( '/^<(' . $tags_to_ignore . ')>/', $content, $matches ) ) { 2861 3104 $ignore_block_element = $matches[1]; 2862 3105 } 2863 3106 2864 3107 // If it's not a tag and not in ignore block 2865 if ( '' == 3108 if ( '' == $ignore_block_element && strlen( $content ) > 0 && '<' != $content[0] ) { 2866 3109 $content = preg_replace_callback( $wp_smiliessearch, 'translate_smiley', $content ); 2867 3110 } 2868 3111 2869 3112 // did we exit ignore block 2870 if ( '' != $ignore_block_element && '</' . $ignore_block_element . '>' == $content ) 3113 if ( '' != $ignore_block_element && '</' . $ignore_block_element . '>' == $content ) { 2871 3114 $ignore_block_element = ''; 2872 3115 } … … 2893 3136 */ 2894 3137 function is_email( $email, $deprecated = false ) { 2895 if ( ! empty( $deprecated ) ) 3138 if ( ! empty( $deprecated ) ) { 2896 3139 _deprecated_argument( __FUNCTION__, '3.0.0' ); 3140 } 2897 3141 2898 3142 // Test for the minimum length the email can be … … 2925 3169 // LOCAL PART 2926 3170 // Test for invalid characters 2927 if ( ! preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local ) ) {3171 if ( ! preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local ) ) { 2928 3172 /** This filter is documented in wp-includes/formatting.php */ 2929 3173 return apply_filters( 'is_email', false, $email, 'local_invalid_chars' ); … … 2961 3205 2962 3206 // Test for invalid characters 2963 if ( ! preg_match('/^[a-z0-9-]+$/i', $sub ) ) {3207 if ( ! preg_match( '/^[a-z0-9-]+$/i', $sub ) ) { 2964 3208 /** This filter is documented in wp-includes/formatting.php */ 2965 3209 return apply_filters( 'is_email', false, $email, 'sub_invalid_chars' ); … … 2982 3226 function wp_iso_descrambler( $string ) { 2983 3227 /* this may only work with iso-8859-1, I'm afraid */ 2984 if ( !preg_match('#\=\?(.+)\?Q\?(.+)\?\=#i', $string, $matches)) {3228 if ( ! preg_match( '#\=\?(.+)\?Q\?(.+)\?\=#i', $string, $matches ) ) { 2985 3229 return $string; 2986 3230 } else { 2987 $subject = str_replace( '_', ' ', $matches[2]);3231 $subject = str_replace( '_', ' ', $matches[2] ); 2988 3232 return preg_replace_callback( '#\=([0-9a-f]{2})#i', '_wp_iso_convert', $subject ); 2989 3233 } … … 3035 3279 } 3036 3280 $string_time = gmmktime( $matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1] ); 3037 $string_gmt = gmdate( $format, $string_time - get_option( 'gmt_offset' ) * HOUR_IN_SECONDS );3281 $string_gmt = gmdate( $format, $string_time - get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ); 3038 3282 } 3039 3283 return $string_gmt; … … 3058 3302 if ( $tz ) { 3059 3303 $datetime = date_create( $string, new DateTimeZone( 'UTC' ) ); 3060 if ( ! $datetime ) 3304 if ( ! $datetime ) { 3061 3305 return date( $format, 0 ); 3306 } 3062 3307 $datetime->setTimezone( new DateTimeZone( $tz ) ); 3063 3308 $string_localtime = $datetime->format( $format ); 3064 3309 } else { 3065 if ( ! preg_match( '#([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})#', $string, $matches) )3310 if ( ! preg_match( '#([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})#', $string, $matches ) ) { 3066 3311 return date( $format, 0 ); 3067 $string_time = gmmktime( $matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1] ); 3312 } 3313 $string_time = gmmktime( $matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1] ); 3068 3314 $string_localtime = gmdate( $format, $string_time + get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ); 3069 3315 } … … 3081 3327 function iso8601_timezone_to_offset( $timezone ) { 3082 3328 // $timezone is either 'Z' or '[+|-]hhmm' 3083 if ( $timezone == 'Z') {3329 if ( $timezone == 'Z' ) { 3084 3330 $offset = 0; 3085 3331 } else { 3086 $sign = ( substr($timezone, 0, 1) == '+') ? 1 : -1;3087 $hours = intval( substr($timezone, 1, 2));3088 $minutes = intval( substr($timezone, 3, 4)) / 60;3089 $offset = $sign * HOUR_IN_SECONDS * ( $hours + $minutes);3332 $sign = ( substr( $timezone, 0, 1 ) == '+' ) ? 1 : -1; 3333 $hours = intval( substr( $timezone, 1, 2 ) ); 3334 $minutes = intval( substr( $timezone, 3, 4 ) ) / 60; 3335 $offset = $sign * HOUR_IN_SECONDS * ( $hours + $minutes ); 3090 3336 } 3091 3337 return $offset; … … 3102 3348 */ 3103 3349 function iso8601_to_datetime( $date_string, $timezone = 'user' ) { 3104 $timezone = strtolower( $timezone);3105 3106 if ( $timezone == 'gmt') {3107 3108 preg_match( '#([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(Z|[\+|\-][0-9]{2,4}){0,1}#', $date_string, $date_bits);3109 3110 if ( !empty($date_bits[7])) { // we have a timezone, so let's compute an offset3111 $offset = iso8601_timezone_to_offset( $date_bits[7]);3350 $timezone = strtolower( $timezone ); 3351 3352 if ( $timezone == 'gmt' ) { 3353 3354 preg_match( '#([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(Z|[\+|\-][0-9]{2,4}){0,1}#', $date_string, $date_bits ); 3355 3356 if ( ! empty( $date_bits[7] ) ) { // we have a timezone, so let's compute an offset 3357 $offset = iso8601_timezone_to_offset( $date_bits[7] ); 3112 3358 } else { // we don't have a timezone, so we assume user local timezone (not server's!) 3113 $offset = HOUR_IN_SECONDS * get_option( 'gmt_offset');3114 } 3115 3116 $timestamp = gmmktime($date_bits[4], $date_bits[5], $date_bits[6], $date_bits[2], $date_bits[3], $date_bits[1]);3359 $offset = HOUR_IN_SECONDS * get_option( 'gmt_offset' ); 3360 } 3361 3362 $timestamp = gmmktime( $date_bits[4], $date_bits[5], $date_bits[6], $date_bits[2], $date_bits[3], $date_bits[1] ); 3117 3363 $timestamp -= $offset; 3118 3364 3119 return gmdate( 'Y-m-d H:i:s', $timestamp);3120 3121 } elseif ( $timezone == 'user') {3122 return preg_replace( '#([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(Z|[\+|\-][0-9]{2,4}){0,1}#', '$1-$2-$3 $4:$5:$6', $date_string);3365 return gmdate( 'Y-m-d H:i:s', $timestamp ); 3366 3367 } elseif ( $timezone == 'user' ) { 3368 return preg_replace( '#([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(Z|[\+|\-][0-9]{2,4}){0,1}#', '$1-$2-$3 $4:$5:$6', $date_string ); 3123 3369 } 3124 3370 } … … 3247 3493 if ( $diff < HOUR_IN_SECONDS ) { 3248 3494 $mins = round( $diff / MINUTE_IN_SECONDS ); 3249 if ( $mins <= 1 ) 3495 if ( $mins <= 1 ) { 3250 3496 $mins = 1; 3497 } 3251 3498 /* translators: Time difference between two dates, in minutes (min=minute). 1: Number of minutes */ 3252 3499 $since = sprintf( _n( '%s min', '%s mins', $mins ), $mins ); 3253 3500 } elseif ( $diff < DAY_IN_SECONDS && $diff >= HOUR_IN_SECONDS ) { 3254 3501 $hours = round( $diff / HOUR_IN_SECONDS ); 3255 if ( $hours <= 1 ) 3502 if ( $hours <= 1 ) { 3256 3503 $hours = 1; 3504 } 3257 3505 /* translators: Time difference between two dates, in hours. 1: Number of hours */ 3258 3506 $since = sprintf( _n( '%s hour', '%s hours', $hours ), $hours ); 3259 3507 } elseif ( $diff < WEEK_IN_SECONDS && $diff >= DAY_IN_SECONDS ) { 3260 3508 $days = round( $diff / DAY_IN_SECONDS ); 3261 if ( $days <= 1 ) 3509 if ( $days <= 1 ) { 3262 3510 $days = 1; 3511 } 3263 3512 /* translators: Time difference between two dates, in days. 1: Number of days */ 3264 3513 $since = sprintf( _n( '%s day', '%s days', $days ), $days ); 3265 3514 } elseif ( $diff < MONTH_IN_SECONDS && $diff >= WEEK_IN_SECONDS ) { 3266 3515 $weeks = round( $diff / WEEK_IN_SECONDS ); 3267 if ( $weeks <= 1 ) 3516 if ( $weeks <= 1 ) { 3268 3517 $weeks = 1; 3518 } 3269 3519 /* translators: Time difference between two dates, in weeks. 1: Number of weeks */ 3270 3520 $since = sprintf( _n( '%s week', '%s weeks', $weeks ), $weeks ); 3271 3521 } elseif ( $diff < YEAR_IN_SECONDS && $diff >= MONTH_IN_SECONDS ) { 3272 3522 $months = round( $diff / MONTH_IN_SECONDS ); 3273 if ( $months <= 1 ) 3523 if ( $months <= 1 ) { 3274 3524 $months = 1; 3525 } 3275 3526 /* translators: Time difference between two dates, in months. 1: Number of months */ 3276 3527 $since = sprintf( _n( '%s month', '%s months', $months ), $months ); 3277 3528 } elseif ( $diff >= YEAR_IN_SECONDS ) { 3278 3529 $years = round( $diff / YEAR_IN_SECONDS ); 3279 if ( $years <= 1 ) 3530 if ( $years <= 1 ) { 3280 3531 $years = 1; 3532 } 3281 3533 /* translators: Time difference between two dates, in years. 1: Number of years */ 3282 3534 $since = sprintf( _n( '%s year', '%s years', $years ), $years ); … … 3314 3566 $raw_excerpt = $text; 3315 3567 if ( '' == $text ) { 3316 $text = get_the_content( '');3568 $text = get_the_content( '' ); 3317 3569 3318 3570 $text = strip_shortcodes( $text ); … … 3320 3572 /** This filter is documented in wp-includes/post-template.php */ 3321 3573 $text = apply_filters( 'the_content', $text ); 3322 $text = str_replace( ']]>', ']]>', $text);3574 $text = str_replace( ']]>', ']]>', $text ); 3323 3575 3324 3576 /** … … 3338 3590 */ 3339 3591 $excerpt_more = apply_filters( 'excerpt_more', ' ' . '[…]' ); 3340 $text = wp_trim_words( $text, $excerpt_length, $excerpt_more );3592 $text = wp_trim_words( $text, $excerpt_length, $excerpt_more ); 3341 3593 } 3342 3594 /** … … 3371 3623 3372 3624 $original_text = $text; 3373 $text = wp_strip_all_tags( $text );3625 $text = wp_strip_all_tags( $text ); 3374 3626 3375 3627 /* … … 3382 3634 preg_match_all( '/./u', $text, $words_array ); 3383 3635 $words_array = array_slice( $words_array[0], 0, $num_words + 1 ); 3384 $sep = '';3636 $sep = ''; 3385 3637 } else { 3386 3638 $words_array = preg_split( "/[\n\r\t ]+/", $text, $num_words + 1, PREG_SPLIT_NO_EMPTY ); 3387 $sep = ' ';3639 $sep = ' '; 3388 3640 } 3389 3641 … … 3430 3682 */ 3431 3683 $filtered = apply_filters( 'pre_ent2ncr', null, $text ); 3432 if ( null !== $filtered ) 3684 if ( null !== $filtered ) { 3433 3685 return $filtered; 3686 } 3434 3687 3435 3688 $to_ncr = array( 3436 '"' => '"',3437 '&' => '&',3438 '<' => '<',3439 '>' => '>',3440 '|' => '|',3441 ' ' => ' ',3442 '¡' => '¡',3443 '¢' => '¢',3444 '£' => '£',3445 '¤' => '¤',3446 '¥' => '¥',3447 '¦' => '¦',3448 '&brkbar;' => '¦',3449 '§' => '§',3450 '¨' => '¨',3451 '¨' => '¨',3452 '©' => '©',3453 'ª' => 'ª',3454 '«' => '«',3455 '¬' => '¬',3456 '­' => '­',3457 '®' => '®',3458 '¯' => '¯',3459 '&hibar;' => '¯',3460 '°' => '°',3461 '±' => '±',3462 '²' => '²',3463 '³' => '³',3464 '´' => '´',3465 'µ' => 'µ',3466 '¶' => '¶',3467 '·' => '·',3468 '¸' => '¸',3469 '¹' => '¹',3470 'º' => 'º',3471 '»' => '»',3472 '¼' => '¼',3473 '½' => '½',3474 '¾' => '¾',3475 '¿' => '¿',3476 'À' => 'À',3477 'Á' => 'Á',3478 'Â' => 'Â',3479 'Ã' => 'Ã',3480 'Ä' => 'Ä',3481 'Å' => 'Å',3482 'Æ' => 'Æ',3483 'Ç' => 'Ç',3484 'È' => 'È',3485 'É' => 'É',3486 'Ê' => 'Ê',3487 'Ë' => 'Ë',3488 'Ì' => 'Ì',3489 'Í' => 'Í',3490 'Î' => 'Î',3491 'Ï' => 'Ï',3492 'Ð' => 'Ð',3493 'Ñ' => 'Ñ',3494 'Ò' => 'Ò',3495 'Ó' => 'Ó',3496 'Ô' => 'Ô',3497 'Õ' => 'Õ',3498 'Ö' => 'Ö',3499 '×' => '×',3500 'Ø' => 'Ø',3501 'Ù' => 'Ù',3502 'Ú' => 'Ú',3503 'Û' => 'Û',3504 'Ü' => 'Ü',3505 'Ý' => 'Ý',3506 'Þ' => 'Þ',3507 'ß' => 'ß',3508 'à' => 'à',3509 'á' => 'á',3510 'â' => 'â',3511 'ã' => 'ã',3512 'ä' => 'ä',3513 'å' => 'å',3514 'æ' => 'æ',3515 'ç' => 'ç',3516 'è' => 'è',3517 'é' => 'é',3518 'ê' => 'ê',3519 'ë' => 'ë',3520 'ì' => 'ì',3521 'í' => 'í',3522 'î' => 'î',3523 'ï' => 'ï',3524 'ð' => 'ð',3525 'ñ' => 'ñ',3526 'ò' => 'ò',3527 'ó' => 'ó',3528 'ô' => 'ô',3529 'õ' => 'õ',3530 'ö' => 'ö',3531 '÷' => '÷',3532 'ø' => 'ø',3533 'ù' => 'ù',3534 'ú' => 'ú',3535 'û' => 'û',3536 'ü' => 'ü',3537 'ý' => 'ý',3538 'þ' => 'þ',3539 'ÿ' => 'ÿ',3540 'Œ' => 'Œ',3541 'œ' => 'œ',3542 'Š' => 'Š',3543 'š' => 'š',3544 'Ÿ' => 'Ÿ',3545 'ƒ' => 'ƒ',3546 'ˆ' => 'ˆ',3547 '˜' => '˜',3548 'Α' => 'Α',3549 'Β' => 'Β',3550 'Γ' => 'Γ',3551 'Δ' => 'Δ',3552 'Ε' => 'Ε',3553 'Ζ' => 'Ζ',3554 'Η' => 'Η',3555 'Θ' => 'Θ',3556 'Ι' => 'Ι',3557 'Κ' => 'Κ',3558 'Λ' => 'Λ',3559 'Μ' => 'Μ',3560 'Ν' => 'Ν',3561 'Ξ' => 'Ξ',3562 'Ο' => 'Ο',3563 'Π' => 'Π',3564 'Ρ' => 'Ρ',3565 'Σ' => 'Σ',3566 'Τ' => 'Τ',3567 'Υ' => 'Υ',3568 'Φ' => 'Φ',3569 'Χ' => 'Χ',3570 'Ψ' => 'Ψ',3571 'Ω' => 'Ω',3572 'α' => 'α',3573 'β' => 'β',3574 'γ' => 'γ',3575 'δ' => 'δ',3576 'ε' => 'ε',3577 'ζ' => 'ζ',3578 'η' => 'η',3579 'θ' => 'θ',3580 'ι' => 'ι',3581 'κ' => 'κ',3582 'λ' => 'λ',3583 'μ' => 'μ',3584 'ν' => 'ν',3585 'ξ' => 'ξ',3586 'ο' => 'ο',3587 'π' => 'π',3588 'ρ' => 'ρ',3589 'ς' => 'ς',3590 'σ' => 'σ',3591 'τ' => 'τ',3592 'υ' => 'υ',3593 'φ' => 'φ',3594 'χ' => 'χ',3595 'ψ' => 'ψ',3596 'ω' => 'ω',3689 '"' => '"', 3690 '&' => '&', 3691 '<' => '<', 3692 '>' => '>', 3693 '|' => '|', 3694 ' ' => ' ', 3695 '¡' => '¡', 3696 '¢' => '¢', 3697 '£' => '£', 3698 '¤' => '¤', 3699 '¥' => '¥', 3700 '¦' => '¦', 3701 '&brkbar;' => '¦', 3702 '§' => '§', 3703 '¨' => '¨', 3704 '¨' => '¨', 3705 '©' => '©', 3706 'ª' => 'ª', 3707 '«' => '«', 3708 '¬' => '¬', 3709 '­' => '­', 3710 '®' => '®', 3711 '¯' => '¯', 3712 '&hibar;' => '¯', 3713 '°' => '°', 3714 '±' => '±', 3715 '²' => '²', 3716 '³' => '³', 3717 '´' => '´', 3718 'µ' => 'µ', 3719 '¶' => '¶', 3720 '·' => '·', 3721 '¸' => '¸', 3722 '¹' => '¹', 3723 'º' => 'º', 3724 '»' => '»', 3725 '¼' => '¼', 3726 '½' => '½', 3727 '¾' => '¾', 3728 '¿' => '¿', 3729 'À' => 'À', 3730 'Á' => 'Á', 3731 'Â' => 'Â', 3732 'Ã' => 'Ã', 3733 'Ä' => 'Ä', 3734 'Å' => 'Å', 3735 'Æ' => 'Æ', 3736 'Ç' => 'Ç', 3737 'È' => 'È', 3738 'É' => 'É', 3739 'Ê' => 'Ê', 3740 'Ë' => 'Ë', 3741 'Ì' => 'Ì', 3742 'Í' => 'Í', 3743 'Î' => 'Î', 3744 'Ï' => 'Ï', 3745 'Ð' => 'Ð', 3746 'Ñ' => 'Ñ', 3747 'Ò' => 'Ò', 3748 'Ó' => 'Ó', 3749 'Ô' => 'Ô', 3750 'Õ' => 'Õ', 3751 'Ö' => 'Ö', 3752 '×' => '×', 3753 'Ø' => 'Ø', 3754 'Ù' => 'Ù', 3755 'Ú' => 'Ú', 3756 'Û' => 'Û', 3757 'Ü' => 'Ü', 3758 'Ý' => 'Ý', 3759 'Þ' => 'Þ', 3760 'ß' => 'ß', 3761 'à' => 'à', 3762 'á' => 'á', 3763 'â' => 'â', 3764 'ã' => 'ã', 3765 'ä' => 'ä', 3766 'å' => 'å', 3767 'æ' => 'æ', 3768 'ç' => 'ç', 3769 'è' => 'è', 3770 'é' => 'é', 3771 'ê' => 'ê', 3772 'ë' => 'ë', 3773 'ì' => 'ì', 3774 'í' => 'í', 3775 'î' => 'î', 3776 'ï' => 'ï', 3777 'ð' => 'ð', 3778 'ñ' => 'ñ', 3779 'ò' => 'ò', 3780 'ó' => 'ó', 3781 'ô' => 'ô', 3782 'õ' => 'õ', 3783 'ö' => 'ö', 3784 '÷' => '÷', 3785 'ø' => 'ø', 3786 'ù' => 'ù', 3787 'ú' => 'ú', 3788 'û' => 'û', 3789 'ü' => 'ü', 3790 'ý' => 'ý', 3791 'þ' => 'þ', 3792 'ÿ' => 'ÿ', 3793 'Œ' => 'Œ', 3794 'œ' => 'œ', 3795 'Š' => 'Š', 3796 'š' => 'š', 3797 'Ÿ' => 'Ÿ', 3798 'ƒ' => 'ƒ', 3799 'ˆ' => 'ˆ', 3800 '˜' => '˜', 3801 'Α' => 'Α', 3802 'Β' => 'Β', 3803 'Γ' => 'Γ', 3804 'Δ' => 'Δ', 3805 'Ε' => 'Ε', 3806 'Ζ' => 'Ζ', 3807 'Η' => 'Η', 3808 'Θ' => 'Θ', 3809 'Ι' => 'Ι', 3810 'Κ' => 'Κ', 3811 'Λ' => 'Λ', 3812 'Μ' => 'Μ', 3813 'Ν' => 'Ν', 3814 'Ξ' => 'Ξ', 3815 'Ο' => 'Ο', 3816 'Π' => 'Π', 3817 'Ρ' => 'Ρ', 3818 'Σ' => 'Σ', 3819 'Τ' => 'Τ', 3820 'Υ' => 'Υ', 3821 'Φ' => 'Φ', 3822 'Χ' => 'Χ', 3823 'Ψ' => 'Ψ', 3824 'Ω' => 'Ω', 3825 'α' => 'α', 3826 'β' => 'β', 3827 'γ' => 'γ', 3828 'δ' => 'δ', 3829 'ε' => 'ε', 3830 'ζ' => 'ζ', 3831 'η' => 'η', 3832 'θ' => 'θ', 3833 'ι' => 'ι', 3834 'κ' => 'κ', 3835 'λ' => 'λ', 3836 'μ' => 'μ', 3837 'ν' => 'ν', 3838 'ξ' => 'ξ', 3839 'ο' => 'ο', 3840 'π' => 'π', 3841 'ρ' => 'ρ', 3842 'ς' => 'ς', 3843 'σ' => 'σ', 3844 'τ' => 'τ', 3845 'υ' => 'υ', 3846 'φ' => 'φ', 3847 'χ' => 'χ', 3848 'ψ' => 'ψ', 3849 'ω' => 'ω', 3597 3850 'ϑ' => 'ϑ', 3598 'ϒ' => 'ϒ',3599 'ϖ' => 'ϖ',3600 ' ' => ' ',3601 ' ' => ' ',3602 ' ' => ' ',3603 '‌' => '‌',3604 '‍' => '‍',3605 '‎' => '‎',3606 '‏' => '‏',3607 '–' => '–',3608 '—' => '—',3609 '‘' => '‘',3610 '’' => '’',3611 '‚' => '‚',3612 '“' => '“',3613 '”' => '”',3614 '„' => '„',3615 '†' => '†',3616 '‡' => '‡',3617 '•' => '•',3618 '…' => '…',3619 '‰' => '‰',3620 '′' => '′',3621 '″' => '″',3622 '‹' => '‹',3623 '›' => '›',3624 '‾' => '‾',3625 '⁄' => '⁄',3626 '€' => '€',3627 'ℑ' => 'ℑ',3628 '℘' => '℘',3629 'ℜ' => 'ℜ',3630 '™' => '™',3631 'ℵ' => 'ℵ',3632 '↵' => '↵',3633 '⇐' => '⇐',3634 '⇑' => '⇑',3635 '⇒' => '⇒',3636 '⇓' => '⇓',3637 '⇔' => '⇔',3638 '∀' => '∀',3639 '∂' => '∂',3640 '∃' => '∃',3641 '∅' => '∅',3642 '∇' => '∇',3643 '∈' => '∈',3644 '∉' => '∉',3645 '∋' => '∋',3646 '∏' => '∏',3647 '∑' => '∑',3648 '−' => '−',3649 '∗' => '∗',3650 '√' => '√',3651 '∝' => '∝',3652 '∞' => '∞',3653 '∠' => '∠',3654 '∧' => '∧',3655 '∨' => '∨',3656 '∩' => '∩',3657 '∪' => '∪',3658 '∫' => '∫',3659 '∴' => '∴',3660 '∼' => '∼',3661 '≅' => '≅',3662 '≈' => '≈',3663 '≠' => '≠',3664 '≡' => '≡',3665 '≤' => '≤',3666 '≥' => '≥',3667 '⊂' => '⊂',3668 '⊃' => '⊃',3669 '⊄' => '⊄',3670 '⊆' => '⊆',3671 '⊇' => '⊇',3672 '⊕' => '⊕',3673 '⊗' => '⊗',3674 '⊥' => '⊥',3675 '⋅' => '⋅',3676 '⌈' => '⌈',3677 '⌉' => '⌉',3678 '⌊' => '⌊',3679 '⌋' => '⌋',3680 '⟨' => '〈',3681 '⟩' => '〉',3682 '←' => '←',3683 '↑' => '↑',3684 '→' => '→',3685 '↓' => '↓',3686 '↔' => '↔',3687 '◊' => '◊',3688 '♠' => '♠',3689 '♣' => '♣',3690 '♥' => '♥',3691 '♦' => '♦'3851 'ϒ' => 'ϒ', 3852 'ϖ' => 'ϖ', 3853 ' ' => ' ', 3854 ' ' => ' ', 3855 ' ' => ' ', 3856 '‌' => '‌', 3857 '‍' => '‍', 3858 '‎' => '‎', 3859 '‏' => '‏', 3860 '–' => '–', 3861 '—' => '—', 3862 '‘' => '‘', 3863 '’' => '’', 3864 '‚' => '‚', 3865 '“' => '“', 3866 '”' => '”', 3867 '„' => '„', 3868 '†' => '†', 3869 '‡' => '‡', 3870 '•' => '•', 3871 '…' => '…', 3872 '‰' => '‰', 3873 '′' => '′', 3874 '″' => '″', 3875 '‹' => '‹', 3876 '›' => '›', 3877 '‾' => '‾', 3878 '⁄' => '⁄', 3879 '€' => '€', 3880 'ℑ' => 'ℑ', 3881 '℘' => '℘', 3882 'ℜ' => 'ℜ', 3883 '™' => '™', 3884 'ℵ' => 'ℵ', 3885 '↵' => '↵', 3886 '⇐' => '⇐', 3887 '⇑' => '⇑', 3888 '⇒' => '⇒', 3889 '⇓' => '⇓', 3890 '⇔' => '⇔', 3891 '∀' => '∀', 3892 '∂' => '∂', 3893 '∃' => '∃', 3894 '∅' => '∅', 3895 '∇' => '∇', 3896 '∈' => '∈', 3897 '∉' => '∉', 3898 '∋' => '∋', 3899 '∏' => '∏', 3900 '∑' => '∑', 3901 '−' => '−', 3902 '∗' => '∗', 3903 '√' => '√', 3904 '∝' => '∝', 3905 '∞' => '∞', 3906 '∠' => '∠', 3907 '∧' => '∧', 3908 '∨' => '∨', 3909 '∩' => '∩', 3910 '∪' => '∪', 3911 '∫' => '∫', 3912 '∴' => '∴', 3913 '∼' => '∼', 3914 '≅' => '≅', 3915 '≈' => '≈', 3916 '≠' => '≠', 3917 '≡' => '≡', 3918 '≤' => '≤', 3919 '≥' => '≥', 3920 '⊂' => '⊂', 3921 '⊃' => '⊃', 3922 '⊄' => '⊄', 3923 '⊆' => '⊆', 3924 '⊇' => '⊇', 3925 '⊕' => '⊕', 3926 '⊗' => '⊗', 3927 '⊥' => '⊥', 3928 '⋅' => '⋅', 3929 '⌈' => '⌈', 3930 '⌉' => '⌉', 3931 '⌊' => '⌊', 3932 '⌋' => '⌋', 3933 '⟨' => '〈', 3934 '⟩' => '〉', 3935 '←' => '←', 3936 '↑' => '↑', 3937 '→' => '→', 3938 '↓' => '↓', 3939 '↔' => '↔', 3940 '◊' => '◊', 3941 '♠' => '♠', 3942 '♣' => '♣', 3943 '♥' => '♥', 3944 '♦' => '♦', 3692 3945 ); 3693 3946 3694 return str_replace( array_keys( $to_ncr), array_values($to_ncr), $text );3947 return str_replace( array_keys( $to_ncr ), array_values( $to_ncr ), $text ); 3695 3948 } 3696 3949 … … 3791 4044 * @param string $url The URL to be cleaned. 3792 4045 * @param array $protocols Optional. An array of acceptable protocols. 3793 * 4046 * Defaults to return value of wp_allowed_protocols() 3794 4047 * @param string $_context Private. Use esc_url_raw() for database usage. 3795 4048 * @return string The cleaned $url after the {@see 'clean_url'} filter is applied. … … 3798 4051 $original_url = $url; 3799 4052 3800 if ( '' == $url ) 4053 if ( '' == $url ) { 3801 4054 return $url; 4055 } 3802 4056 3803 4057 $url = str_replace( ' ', '%20', $url ); 3804 $url = preg_replace( '|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\[\]\\x80-\\xff]|i', '', $url);4058 $url = preg_replace( '|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\[\]\\x80-\\xff]|i', '', $url ); 3805 4059 3806 4060 if ( '' === $url ) { … … 3809 4063 3810 4064 if ( 0 !== stripos( $url, 'mailto:' ) ) { 3811 $strip = array( '%0d', '%0a', '%0D', '%0A');3812 $url = _deep_replace($strip, $url);3813 } 3814 3815 $url = str_replace( ';//', '://', $url);4065 $strip = array( '%0d', '%0a', '%0D', '%0A' ); 4066 $url = _deep_replace( $strip, $url ); 4067 } 4068 4069 $url = str_replace( ';//', '://', $url ); 3816 4070 /* If the URL doesn't appear to contain a scheme, we 3817 4071 * presume it needs http:// prepended (unless a relative 3818 4072 * link starting with /, # or ? or a php file). 3819 4073 */ 3820 if ( strpos( $url, ':') === false && ! in_array( $url[0], array( '/', '#', '?' ) ) &&3821 ! preg_match( '/^[a-z0-9-]+?\.php/i', $url) )4074 if ( strpos( $url, ':' ) === false && ! in_array( $url[0], array( '/', '#', '?' ) ) && 4075 ! preg_match( '/^[a-z0-9-]+?\.php/i', $url ) ) { 3822 4076 $url = 'http://' . $url; 4077 } 3823 4078 3824 4079 // Replace ampersands and single quotes only when displaying. … … 3869 4124 $good_protocol_url = $url; 3870 4125 } else { 3871 if ( ! is_array( $protocols ) ) 4126 if ( ! is_array( $protocols ) ) { 3872 4127 $protocols = wp_allowed_protocols(); 4128 } 3873 4129 $good_protocol_url = wp_kses_bad_protocol( $url, $protocols ); 3874 if ( strtolower( $good_protocol_url ) != strtolower( $url ) ) 4130 if ( strtolower( $good_protocol_url ) != strtolower( $url ) ) { 3875 4131 return ''; 4132 } 3876 4133 } 3877 4134 … … 3912 4169 */ 3913 4170 function htmlentities2( $myHTML ) { 3914 $translation_table = get_html_translation_table( HTML_ENTITIES, ENT_QUOTES );3915 $translation_table[ chr(38)] = '&';3916 return preg_replace( "/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,3};)/", "&", strtr($myHTML, $translation_table) );4171 $translation_table = get_html_translation_table( HTML_ENTITIES, ENT_QUOTES ); 4172 $translation_table[ chr( 38 ) ] = '&'; 4173 return preg_replace( '/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,3};)/', '&', strtr( $myHTML, $translation_table ) ); 3917 4174 } 3918 4175 … … 3944 4201 * 3945 4202 * @param string $safe_text The text after it has been escaped. 3946 4203 * @param string $text The text prior to being escaped. 3947 4204 */ 3948 4205 return apply_filters( 'js_escape', $safe_text, $text ); … … 3969 4226 * 3970 4227 * @param string $safe_text The text after it has been escaped. 3971 4228 * @param string $text The text prior to being escaped. 3972 4229 */ 3973 4230 return apply_filters( 'esc_html', $safe_text, $text ); … … 3994 4251 * 3995 4252 * @param string $safe_text The text after it has been escaped. 3996 4253 * @param string $text The text prior to being escaped. 3997 4254 */ 3998 4255 return apply_filters( 'attribute_escape', $safe_text, $text ); … … 4015 4272 * 4016 4273 * @param string $safe_text The text after it has been escaped. 4017 4274 * @param string $text The text prior to being escaped. 4018 4275 */ 4019 4276 return apply_filters( 'esc_textarea', $safe_text, $text ); … … 4029 4286 */ 4030 4287 function tag_escape( $tag_name ) { 4031 $safe_tag = strtolower( preg_replace( '/[^a-zA-Z0-9_:]/', '', $tag_name) );4288 $safe_tag = strtolower( preg_replace( '/[^a-zA-Z0-9_:]/', '', $tag_name ) ); 4032 4289 /** 4033 4290 * Filters a string cleaned and escaped for output as an HTML tag. … … 4036 4293 * 4037 4294 * @param string $safe_tag The tag name after it has been escaped. 4038 4295 * @param string $tag_name The text before it was escaped. 4039 4296 */ 4040 4297 return apply_filters( 'tag_escape', $safe_tag, $tag_name ); … … 4075 4332 4076 4333 $original_value = $value; 4077 $error = '';4334 $error = ''; 4078 4335 4079 4336 switch ( $option ) { 4080 case 'admin_email' 4081 case 'new_admin_email' 4337 case 'admin_email': 4338 case 'new_admin_email': 4082 4339 $value = $wpdb->strip_invalid_text_for_column( $wpdb->options, 'option_value', $value ); 4083 4340 if ( is_wp_error( $value ) ) { … … 4119 4376 case 'posts_per_rss': 4120 4377 $value = (int) $value; 4121 if ( empty( $value) )4378 if ( empty( $value ) ) { 4122 4379 $value = 1; 4123 if ( $value < -1 ) 4124 $value = abs($value); 4380 } 4381 if ( $value < -1 ) { 4382 $value = abs( $value ); 4383 } 4125 4384 break; 4126 4385 … … 4128 4387 case 'default_comment_status': 4129 4388 // Options that if not there have 0 value but need to be something like "closed" 4130 if ( $value == '0' || $value == '' )4389 if ( $value == '0' || $value == '' ) { 4131 4390 $value = 'closed'; 4391 } 4132 4392 break; 4133 4393 … … 4147 4407 4148 4408 case 'blog_charset': 4149 $value = preg_replace( '/[^a-zA-Z0-9_-]/', '', $value); // strips slashes4409 $value = preg_replace( '/[^a-zA-Z0-9_-]/', '', $value ); // strips slashes 4150 4410 break; 4151 4411 4152 4412 case 'blog_public': 4153 4413 // This is the value if the settings checkbox is not checked on POST. Don't rely on this. 4154 if ( null === $value ) 4414 if ( null === $value ) { 4155 4415 $value = 1; 4156 else4416 } else { 4157 4417 $value = intval( $value ); 4418 } 4158 4419 break; 4159 4420 … … 4181 4442 4182 4443 case 'gmt_offset': 4183 $value = preg_replace( '/[^0-9:.-]/', '', $value); // strips slashes4444 $value = preg_replace( '/[^0-9:.-]/', '', $value ); // strips slashes 4184 4445 break; 4185 4446 … … 4225 4486 $error = $value->get_error_message(); 4226 4487 } else { 4227 if ( ! is_array( $value ) ) 4488 if ( ! is_array( $value ) ) { 4228 4489 $value = explode( ' ', $value ); 4490 } 4229 4491 4230 4492 $value = array_values( array_filter( array_map( 'trim', $value ) ) ); 4231 4493 4232 if ( ! $value ) 4494 if ( ! $value ) { 4233 4495 $value = ''; 4496 } 4234 4497 } 4235 4498 break; … … 4241 4504 $error = $value->get_error_message(); 4242 4505 } else { 4243 if ( ! is_array( $value ) ) 4506 if ( ! is_array( $value ) ) { 4244 4507 $value = explode( "\n", $value ); 4508 } 4245 4509 4246 4510 $domains = array_values( array_filter( array_map( 'trim', $value ) ) ); 4247 $value = array();4511 $value = array(); 4248 4512 4249 4513 foreach ( $domains as $domain ) { … … 4252 4516 } 4253 4517 } 4254 if ( ! $value ) 4518 if ( ! $value ) { 4255 4519 $value = ''; 4520 } 4256 4521 } 4257 4522 break; … … 4284 4549 break; 4285 4550 4286 case 'default_role' 4287 if ( ! get_role( $value ) && get_role( 'subscriber' ) ) 4551 case 'default_role': 4552 if ( ! get_role( $value ) && get_role( 'subscriber' ) ) { 4288 4553 $value = 'subscriber'; 4554 } 4289 4555 break; 4290 4556 … … 4364 4630 function wp_parse_str( $string, &$array ) { 4365 4631 parse_str( $string, $array ); 4366 if ( get_magic_quotes_gpc() ) 4632 if ( get_magic_quotes_gpc() ) { 4367 4633 $array = stripslashes_deep( $array ); 4634 } 4368 4635 /** 4369 4636 * Filters the array of variables derived from a parsed string. … … 4387 4654 */ 4388 4655 function wp_pre_kses_less_than( $text ) { 4389 return preg_replace_callback( '%<[^>]*?((?=<)|>|$)%', 'wp_pre_kses_less_than_callback', $text);4656 return preg_replace_callback( '%<[^>]*?((?=<)|>|$)%', 'wp_pre_kses_less_than_callback', $text ); 4390 4657 } 4391 4658 … … 4399 4666 */ 4400 4667 function wp_pre_kses_less_than_callback( $matches ) { 4401 if ( false === strpos($matches[0], '>') ) 4402 return esc_html($matches[0]); 4668 if ( false === strpos( $matches[0], '>' ) ) { 4669 return esc_html( $matches[0] ); 4670 } 4403 4671 return $matches[0]; 4404 4672 } … … 4415 4683 */ 4416 4684 function wp_sprintf( $pattern ) { 4417 $args = func_get_args();4418 $len = strlen($pattern);4419 $start = 0;4420 $result = '';4685 $args = func_get_args(); 4686 $len = strlen( $pattern ); 4687 $start = 0; 4688 $result = ''; 4421 4689 $arg_index = 0; 4422 4690 while ( $len > $start ) { 4423 4691 // Last character: append and break 4424 if ( strlen( $pattern) - 1 == $start ) {4425 $result .= substr( $pattern, -1);4692 if ( strlen( $pattern ) - 1 == $start ) { 4693 $result .= substr( $pattern, -1 ); 4426 4694 break; 4427 4695 } 4428 4696 4429 4697 // Literal %: append and continue 4430 if ( substr( $pattern, $start, 2) == '%%' ) {4431 $start += 2;4698 if ( substr( $pattern, $start, 2 ) == '%%' ) { 4699 $start += 2; 4432 4700 $result .= '%'; 4433 4701 continue; … … 4435 4703 4436 4704 // Get fragment before next % 4437 $end = strpos( $pattern, '%', $start + 1);4438 if ( false === $end ) 4705 $end = strpos( $pattern, '%', $start + 1 ); 4706 if ( false === $end ) { 4439 4707 $end = $len; 4440 $fragment = substr($pattern, $start, $end - $start); 4708 } 4709 $fragment = substr( $pattern, $start, $end - $start ); 4441 4710 4442 4711 // Fragment has a specifier 4443 if ( $pattern[ $start] == '%' ) {4712 if ( $pattern[ $start ] == '%' ) { 4444 4713 // Find numbered arguments or take the next one in order 4445 if ( preg_match( '/^%(\d+)\$/', $fragment, $matches) ) {4446 $arg = isset($args[$matches[1]]) ? $args[$matches[1]] : '';4447 $fragment = str_replace( "%{$matches[1]}$", '%', $fragment);4714 if ( preg_match( '/^%(\d+)\$/', $fragment, $matches ) ) { 4715 $arg = isset( $args[ $matches[1] ] ) ? $args[ $matches[1] ] : ''; 4716 $fragment = str_replace( "%{$matches[1]}$", '%', $fragment ); 4448 4717 } else { 4449 4718 ++$arg_index; 4450 $arg = isset( $args[$arg_index]) ? $args[$arg_index] : '';4719 $arg = isset( $args[ $arg_index ] ) ? $args[ $arg_index ] : ''; 4451 4720 } 4452 4721 … … 4462 4731 */ 4463 4732 $_fragment = apply_filters( 'wp_sprintf', $fragment, $arg ); 4464 if ( $_fragment != $fragment ) 4733 if ( $_fragment != $fragment ) { 4465 4734 $fragment = $_fragment; 4466 else 4467 $fragment = sprintf($fragment, strval($arg) ); 4735 } else { 4736 $fragment = sprintf( $fragment, strval( $arg ) ); 4737 } 4468 4738 } 4469 4739 4470 4740 // Append to result and move to next fragment 4471 4741 $result .= $fragment; 4472 $start = $end;4742 $start = $end; 4473 4743 } 4474 4744 return $result; … … 4490 4760 function wp_sprintf_l( $pattern, $args ) { 4491 4761 // Not a match 4492 if ( substr( $pattern, 0, 2) != '%l' )4762 if ( substr( $pattern, 0, 2 ) != '%l' ) { 4493 4763 return $pattern; 4764 } 4494 4765 4495 4766 // Nothing to work with 4496 if ( empty( $args) )4767 if ( empty( $args ) ) { 4497 4768 return ''; 4769 } 4498 4770 4499 4771 /** … … 4508 4780 * @param array $delimiters An array of translated delimiters. 4509 4781 */ 4510 $l = apply_filters( 'wp_sprintf_l', array( 4511 /* translators: used to join items in a list with more than 2 items */ 4512 'between' => sprintf( __('%s, %s'), '', '' ), 4513 /* translators: used to join last two items in a list with more than 2 times */ 4514 'between_last_two' => sprintf( __('%s, and %s'), '', '' ), 4515 /* translators: used to join items in a list with only 2 items */ 4516 'between_only_two' => sprintf( __('%s and %s'), '', '' ), 4517 ) ); 4518 4519 $args = (array) $args; 4520 $result = array_shift($args); 4521 if ( count($args) == 1 ) 4522 $result .= $l['between_only_two'] . array_shift($args); 4782 $l = apply_filters( 4783 'wp_sprintf_l', array( 4784 /* translators: used to join items in a list with more than 2 items */ 4785 'between' => sprintf( __( '%1$s, %2$s' ), '', '' ), 4786 /* translators: used to join last two items in a list with more than 2 times */ 4787 'between_last_two' => sprintf( __( '%1$s, and %2$s' ), '', '' ), 4788 /* translators: used to join items in a list with only 2 items */ 4789 'between_only_two' => sprintf( __( '%1$s and %2$s' ), '', '' ), 4790 ) 4791 ); 4792 4793 $args = (array) $args; 4794 $result = array_shift( $args ); 4795 if ( count( $args ) == 1 ) { 4796 $result .= $l['between_only_two'] . array_shift( $args ); 4797 } 4523 4798 // Loop when more than two args 4524 $i = count( $args);4799 $i = count( $args ); 4525 4800 while ( $i ) { 4526 $arg = array_shift( $args);4801 $arg = array_shift( $args ); 4527 4802 $i--; 4528 if ( 0 == $i ) 4803 if ( 0 == $i ) { 4529 4804 $result .= $l['between_last_two'] . $arg; 4530 else4805 } else { 4531 4806 $result .= $l['between'] . $arg; 4532 } 4533 return $result . substr($pattern, 2); 4807 } 4808 } 4809 return $result . substr( $pattern, 2 ); 4534 4810 } 4535 4811 … … 4549 4825 */ 4550 4826 function wp_html_excerpt( $str, $count, $more = null ) { 4551 if ( null === $more ) 4827 if ( null === $more ) { 4552 4828 $more = ''; 4553 $str = wp_strip_all_tags( $str, true ); 4829 } 4830 $str = wp_strip_all_tags( $str, true ); 4554 4831 $excerpt = mb_substr( $str, 0, $count ); 4555 4832 // remove part of an entity at the end 4556 4833 $excerpt = preg_replace( '/&[^;\s]{0,6}$/', '', $excerpt ); 4557 if ( $str != $excerpt ) 4834 if ( $str != $excerpt ) { 4558 4835 $excerpt = trim( $excerpt ) . $more; 4836 } 4559 4837 return $excerpt; 4560 4838 } … … 4575 4853 * @return string The processed content. 4576 4854 */ 4577 function links_add_base_url( $content, $base, $attrs = array( 'src', 'href') ) {4855 function links_add_base_url( $content, $base, $attrs = array( 'src', 'href' ) ) { 4578 4856 global $_links_add_base; 4579 4857 $_links_add_base = $base; 4580 $attrs = implode('|', (array)$attrs);4858 $attrs = implode( '|', (array) $attrs ); 4581 4859 return preg_replace_callback( "!($attrs)=(['\"])(.+?)\\2!i", '_links_add_base', $content ); 4582 4860 } … … 4621 4899 * @return string The processed content. 4622 4900 */ 4623 function links_add_target( $content, $target = '_blank', $tags = array( 'a') ) {4901 function links_add_target( $content, $target = '_blank', $tags = array( 'a' ) ) { 4624 4902 global $_links_add_target; 4625 4903 $_links_add_target = $target; 4626 $tags = implode('|', (array)$tags);4904 $tags = implode( '|', (array) $tags ); 4627 4905 return preg_replace_callback( "!<($tags)([^>]*)>!i", '_links_add_target', $content ); 4628 4906 } … … 4641 4919 function _links_add_target( $m ) { 4642 4920 global $_links_add_target; 4643 $tag = $m[1];4644 $link = preg_replace( '|( target=([\'"])(.*?)\2)|i', '', $m[2]);4921 $tag = $m[1]; 4922 $link = preg_replace( '|( target=([\'"])(.*?)\2)|i', '', $m[2] ); 4645 4923 return '<' . $tag . $link . ' target="' . esc_attr( $_links_add_target ) . '">'; 4646 4924 } … … 4655 4933 */ 4656 4934 function normalize_whitespace( $str ) { 4657 $str 4658 $str 4659 $str 4935 $str = trim( $str ); 4936 $str = str_replace( "\r", "\n", $str ); 4937 $str = preg_replace( array( '/\n+/', '/[ \t]+/' ), array( "\n", ' ' ), $str ); 4660 4938 return $str; 4661 4939 } … … 4674 4952 * @return string The processed string. 4675 4953 */ 4676 function wp_strip_all_tags( $string, $remove_breaks = false) {4954 function wp_strip_all_tags( $string, $remove_breaks = false ) { 4677 4955 $string = preg_replace( '@<(script|style)[^>]*?>.*?</\\1>@si', '', $string ); 4678 $string = strip_tags($string); 4679 4680 if ( $remove_breaks ) 4681 $string = preg_replace('/[\r\n\t ]+/', ' ', $string); 4956 $string = strip_tags( $string ); 4957 4958 if ( $remove_breaks ) { 4959 $string = preg_replace( '/[\r\n\t ]+/', ' ', $string ); 4960 } 4682 4961 4683 4962 return trim( $string ); … … 4757 5036 $filtered = wp_check_invalid_utf8( $str ); 4758 5037 4759 if ( strpos( $filtered, '<') !== false ) {5038 if ( strpos( $filtered, '<' ) !== false ) { 4760 5039 $filtered = wp_pre_kses_less_than( $filtered ); 4761 5040 // This will strip extra whitespace for us. … … 4764 5043 // Use html entities in a special case to make sure no later 4765 5044 // newline stripping stage could lead to a functional tag 4766 $filtered = str_replace( "<\n", "<\n", $filtered);5045 $filtered = str_replace( "<\n", "<\n", $filtered ); 4767 5046 } 4768 5047 … … 4773 5052 4774 5053 $found = false; 4775 while ( preg_match( '/%[a-f0-9]{2}/i', $filtered, $match) ) {4776 $filtered = str_replace( $match[0], '', $filtered);4777 $found = true;5054 while ( preg_match( '/%[a-f0-9]{2}/i', $filtered, $match ) ) { 5055 $filtered = str_replace( $match[0], '', $filtered ); 5056 $found = true; 4778 5057 } 4779 5058 4780 5059 if ( $found ) { 4781 5060 // Strip out the whitespace that may now exist after removing the octets. 4782 $filtered = trim( preg_replace( '/ +/', ' ', $filtered) );5061 $filtered = trim( preg_replace( '/ +/', ' ', $filtered ) ); 4783 5062 } 4784 5063 … … 4800 5079 4801 5080 /** 4802 * Forever eliminate "Word press" from the planet (or at least the little bit we can influence).5081 * Forever eliminate "WordPress" from the planet (or at least the little bit we can influence). 4803 5082 * 4804 5083 * Violating our coding standards for a good function name. … … 4814 5093 // Simple replacement for titles 4815 5094 $current_filter = current_filter(); 4816 if ( 'the_title' === $current_filter || 'wp_title' === $current_filter ) 4817 return str_replace( 'Wordpress', 'WordPress', $text ); 5095 if ( 'the_title' === $current_filter || 'wp_title' === $current_filter ) { 5096 return str_replace( 'WordPress', 'WordPress', $text ); 5097 } 4818 5098 // Still here? Use the more judicious replacement 4819 5099 static $dblq = false; … … 4824 5104 array( ' Wordpress', '‘Wordpress', $dblq . 'Wordpress', '>Wordpress', '(Wordpress' ), 4825 5105 array( ' WordPress', '‘WordPress', $dblq . 'WordPress', '>WordPress', '(WordPress' ), 4826 $text ); 5106 $text 5107 ); 4827 5108 } 4828 5109 … … 4859 5140 $urls_to_ping = preg_split( '/[\r\n\t ]/', trim( $to_ping ), -1, PREG_SPLIT_NO_EMPTY ); 4860 5141 foreach ( $urls_to_ping as $k => $url ) { 4861 if ( !preg_match( '#^https?://.#i', $url ) ) 4862 unset( $urls_to_ping[$k] ); 5142 if ( ! preg_match( '#^https?://.#i', $url ) ) { 5143 unset( $urls_to_ping[ $k ] ); 5144 } 4863 5145 } 4864 5146 $urls_to_ping = array_map( 'esc_url_raw', $urls_to_ping ); … … 4893 5175 foreach ( $value as $k => $v ) { 4894 5176 if ( is_array( $v ) ) { 4895 $value[ $k] = wp_slash( $v );5177 $value[ $k ] = wp_slash( $v ); 4896 5178 } else { 4897 $value[ $k] = addslashes( $v );5179 $value[ $k ] = addslashes( $v ); 4898 5180 } 4899 5181 } … … 5051 5333 * @param string The emoji extension for png files. Default .png. 5052 5334 */ 5053 'ext' => apply_filters( 'emoji_ext', '.png' ),5335 'ext' => apply_filters( 'emoji_ext', '.png' ), 5054 5336 5055 5337 /** … … 5060 5342 * @param string The emoji base URL for svg images. 5061 5343 */ 5062 'svgUrl' => apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/2.3/svg/' ),5344 'svgUrl' => apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/2.3/svg/' ), 5063 5345 5064 5346 /** … … 5069 5351 * @param string The emoji extension for svg files. Default .svg. 5070 5352 */ 5071 'svgExt' => apply_filters( 'emoji_svg_ext', '.svg' ),5353 'svgExt' => apply_filters( 'emoji_svg_ext', '.svg' ), 5072 5354 ); 5073 5355 … … 5085 5367 <script type="text/javascript"> 5086 5368 window._wpemojiSettings = <?php echo wp_json_encode( $settings ); ?>; 5087 <?php readfile( ABSPATH . WPINC . "/js/wp-emoji-loader.js"); ?>5369 <?php readfile( ABSPATH . WPINC . '/js/wp-emoji-loader.js' ); ?> 5088 5370 </script> 5089 5371 <?php … … 5167 5449 // Quickly narrow down the list of emoji that might be in the text and need replacing. 5168 5450 $possible_emoji = array(); 5169 foreach ( $emoji as $emojum ) {5451 foreach ( $emoji as $emojum ) { 5170 5452 if ( false !== strpos( $text, $emojum ) ) { 5171 5453 if ( version_compare( phpversion(), '5.4', '<' ) ) { … … 5195 5477 */ 5196 5478 $textarr = preg_split( '/(<.*>)/U', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); 5197 $stop = count( $textarr );5479 $stop = count( $textarr ); 5198 5480 5199 5481 // Ignore processing of specific tags. 5200 $tags_to_ignore = 'code|pre|style|script|textarea';5482 $tags_to_ignore = 'code|pre|style|script|textarea'; 5201 5483 $ignore_block_element = ''; 5202 5484 5203 5485 for ( $i = 0; $i < $stop; $i++ ) { 5204 $content = $textarr[ $i];5486 $content = $textarr[ $i ]; 5205 5487 5206 5488 // If we're in an ignore block, wait until we find its closing tag. 5207 if ( '' == $ignore_block_element && preg_match( '/^<(' . $tags_to_ignore . ')>/', $content, $matches ) ) 5489 if ( '' == $ignore_block_element && preg_match( '/^<(' . $tags_to_ignore . ')>/', $content, $matches ) ) { 5208 5490 $ignore_block_element = $matches[1]; 5209 5491 } 5210 5492 5211 5493 // If it's not a tag and not in ignore block. 5212 if ( '' == 5494 if ( '' == $ignore_block_element && strlen( $content ) > 0 && '<' != $content[0] && false !== strpos( $content, '&#x' ) ) { 5213 5495 foreach ( $possible_emoji as $emojum => $emoji_char ) { 5214 5496 if ( false === strpos( $content, $emojum ) ) { … … 5217 5499 5218 5500 $file = str_replace( ';&#x', '-', $emojum ); 5219 $file = str_replace( array( '&#x', ';' ), '', $file );5501 $file = str_replace( array( '&#x', ';' ), '', $file ); 5220 5502 5221 5503 $entity = sprintf( '<img src="%s" alt="%s" class="wp-smiley" style="height: 1em; max-height: 1em;" />', $cdn_url . $file . $ext, $emoji_char ); … … 5226 5508 5227 5509 // Did we exit ignore block. 5228 if ( '' != $ignore_block_element && '</' . $ignore_block_element . '>' == $content ) 5510 if ( '' != $ignore_block_element && '</' . $ignore_block_element . '>' == $content ) { 5229 5511 $ignore_block_element = ''; 5230 5512 } … … 5269 5551 5270 5552 foreach ( $headers as $header ) { 5271 if ( strpos( $header, ':') === false ) {5553 if ( strpos( $header, ':' ) === false ) { 5272 5554 continue; 5273 5555 } … … 5277 5559 5278 5560 // Cleanup crew. 5279 $name = trim( $name 5561 $name = trim( $name ); 5280 5562 $content = trim( $content ); 5281 5563 … … 5283 5565 if ( strpos( $content, ';' ) !== false ) { 5284 5566 list( $type, $charset ) = explode( ';', $content ); 5285 $content_type = trim( $type );5567 $content_type = trim( $type ); 5286 5568 } else { 5287 5569 $content_type = trim( $content ); … … 5322 5604 5323 5605 // START: emoji arrays 5324 $entities = array( '👩‍❤️‍💋‍👩','👩‍❤️‍💋‍👨','👨‍❤️‍💋‍👨','🏴󠁧󠁢󠁳󠁣󠁴󠁿','🏴󠁧󠁢󠁷󠁬󠁳󠁿','🏴󠁧󠁢󠁥󠁮󠁧󠁿','👩‍👩‍👧‍👦','👨‍👨‍👦‍👦','👩‍👩‍👦‍👦','👨‍👨‍👧‍👦','👨‍👨‍👧‍👧','👨‍👩‍👧‍👧','👨‍👩‍👦‍👦','👩‍👩‍👧‍👧','👨‍👩‍👧‍👦','👨‍❤️‍👨','👩‍❤️‍👨','👩‍❤️‍👩','👩‍👩‍👦','👩‍👦‍👦','👩‍👧‍👦','👩‍👧‍👧','👨‍👨‍👦','👨‍👩‍👧','👨‍👧‍👧','👨‍👧‍👦','👩‍👩‍👧','👨‍👩‍👦','👨‍👨‍👧','👨‍👦‍👦','🤷🏻‍♂️','🏋🏻‍♂️','🏋🏼‍♀️','🏋🏼‍♂️','🏋🏽‍♀️','🏋🏽‍♂️','🏋🏾‍♀️','🏋🏾‍♂️','🏋🏿‍♀️','🏋🏿‍♂️','🏌🏻‍♀️','🏌🏻‍♂️','🏌🏼‍♀️','🏌🏼‍♂️','🏌🏽‍♀️','🏌🏽‍♂️','🏌🏾‍♀️','🏌🏾‍♂️','🏌🏿‍♀️','🏌🏿‍♂️','💂🏻‍♀️','🏃🏼‍♀️','🏃🏼‍♂️','🧝🏿‍♂️','🧝🏿‍♀️','🧝🏾‍♂️','🧝🏾‍♀️','🧝🏽‍♂️','🧝🏽‍♀️','🧝🏼‍♂️','🧝🏼‍♀️','🧝🏻‍♂️','🧝🏻‍♀️','🧜🏿‍♂️','🧜🏿‍♀️','🧜🏾‍♂️','🧜🏾‍♀️','👨🏻‍⚕️','👨🏻‍⚖️','👨🏻‍✈️','🧜🏽‍♂️','🧜🏽‍♀️','🧜🏼‍♂️','🧜🏼‍♀️','🧜🏻‍♂️','🧜🏻‍♀️','🧛🏿‍♂️','🧛🏿‍♀️','🧛🏾‍♂️','🧛🏾‍♀️','🧛🏽‍♂️','🧛🏽‍♀️','🧛🏼‍♂️','👨🏼‍⚕️','👨🏼‍⚖️','👨🏼‍✈️','🧛🏼‍♀️','🧛🏻‍♂️','🧛🏻‍♀️','🧚🏿‍♂️','🧚🏿‍♀️','🧚🏾‍♂️','🧚🏾‍♀️','🧚🏽‍♂️','🧚🏽‍♀️','🧚🏼‍♂️','🧚🏼‍♀️','🧚🏻‍♂️','🧚🏻‍♀️','👨🏽‍⚕️','👨🏽‍⚖️','👨🏽‍✈️','🧙🏿‍♂️','🧙🏿‍♀️','🧙🏾‍♂️','🧙🏾‍♀️','🧙🏽‍♂️','🧙🏽‍♀️','🧙🏼‍♂️','🧙🏼‍♀️','🧙🏻‍♂️','🧙🏻‍♀️','🧘🏿‍♂️','🧘🏿‍♀️','🧘🏾‍♂️','👨🏾‍⚕️','👨🏾‍⚖️','👨🏾‍✈️','🧘🏾‍♀️','🧘🏽‍♂️','🧘🏽‍♀️','🧘🏼‍♂️','🧘🏼‍♀️','🧘🏻‍♂️','🧘🏻‍♀️','🧗🏿‍♂️','🧗🏿‍♀️','🧗🏾‍♂️','🧗🏾‍♀️','🧗🏽‍♂️','🧗🏽‍♀️','👨🏿‍⚕️','👨🏿‍⚖️','👨🏿‍✈️','🧗🏼‍♂️','🧗🏼‍♀️','🧗🏻‍♂️','🧗🏻‍♀️','🧖🏿‍♂️','🧖🏿‍♀️','🧖🏾‍♂️','🏃🏽‍♀️','🧖🏾‍♀️','🏃🏽‍♂️','🏃🏾‍♀️','🧖🏽‍♂️','🏃🏾‍♂️','🏃🏿‍♀️','🏃🏿‍♂️','🏄🏻‍♀️','🏄🏻‍♂️','🏄🏼‍♀️','🏄🏼‍♂️','🏄🏽‍♀️','🏄🏽‍♂️','🏄🏾‍♀️','🧖🏽‍♀️','🧖🏼‍♂️','🧖🏼‍♀️','🧖🏻‍♂️','🧖🏻‍♀️','🤾🏿‍♂️','🤾🏿‍♀️','🤾🏾‍♂️','🤾🏾‍♀️','🏄🏾‍♂️','🏄🏿‍♀️','🤾🏽‍♂️','🤾🏽‍♀️','🤾🏼‍♂️','🤾🏼‍♀️','🤾🏻‍♂️','🤾🏻‍♀️','🤽🏿‍♂️','🤽🏿‍♀️','🤽🏾‍♂️','🤽🏾‍♀️','🤽🏽‍♂️','🤽🏽‍♀️','🤽🏼‍♂️','👩🏻‍⚕️','👩🏻‍⚖️','👩🏻‍✈️','🤽🏼‍♀️','🤽🏻‍♂️','🤽🏻‍♀️','🤹🏿‍♂️','🤹🏿‍♀️','🤹🏾‍♂️','🤹🏾‍♀️','🤹🏽‍♂️','🤹🏽‍♀️','🤹🏼‍♂️','🤹🏼‍♀️','🤹🏻‍♂️','🤹🏻‍♀️','👩🏼‍⚕️','👩🏼‍⚖️','👩🏼‍✈️','🤸🏿‍♂️','🤸🏿‍♀️','🤸🏾‍♂️','🤸🏾‍♀️','🤸🏽‍♂️','🤸🏽‍♀️','🤸🏼‍♂️','🤸🏼‍♀️','🤸🏻‍♂️','🤸🏻‍♀️','🤷🏿‍♂️','🤷🏿‍♀️','🤷🏾‍♂️','👩🏽‍⚕️','👩🏽‍⚖️','👩🏽‍✈️','🤷🏾‍♀️','🤷🏽‍♂️','🤷🏽‍♀️','🤷🏼‍♂️','🤷🏼‍♀️','🏃🏻‍♂️','🤷🏻‍♀️','🤦🏿‍♂️','🤦🏿‍♀️','🤦🏾‍♂️','🤦🏾‍♀️','🤦🏽‍♂️','🤦🏽‍♀️','👩🏾‍⚕️','👩🏾‍⚖️','👩🏾‍✈️','🤦🏼‍♂️','🤦🏼‍♀️','🤦🏻‍♂️','🤦🏻‍♀️','🚶🏿‍♂️','🚶🏿‍♀️','🚶🏾‍♂️','🚶🏾‍♀️','🚶🏽‍♂️','🚶🏽‍♀️','🚶🏼‍♂️','🚶🏼‍♀️','🚶🏻‍♂️','👩🏿‍⚕️','👩🏿‍⚖️','👩🏿‍✈️','🚶🏻‍♀️','🚵🏿‍♂️','🚵🏿‍♀️','🚵🏾‍♂️','🚵🏾‍♀️','🚵🏽‍♂️','🚵🏽‍♀️','🏄🏿‍♂️','🚵🏼‍♂️','🏊🏻‍♀️','🏊🏻‍♂️','🚵🏼‍♀️','🏊🏼‍♀️','🏊🏼‍♂️','🏊🏽‍♀️','🏊🏽‍♂️','🏊🏾‍♀️','🚵🏻‍♂️','🚵🏻‍♀️','🚴🏿‍♂️','🚴🏿‍♀️','🚴🏾‍♂️','🚴🏾‍♀️','🚴🏽‍♂️','🚴🏽‍♀️','🚴🏼‍♂️','🏊🏾‍♂️','🏊🏿‍♀️','🏊🏿‍♂️','🏋🏻‍♀️','👮🏻‍♀️','👮🏻‍♂️','👮🏼‍♀️','👮🏼‍♂️','👮🏽‍♀️','👮🏽‍♂️','👮🏾‍♀️','👮🏾‍♂️','👮🏿‍♀️','👮🏿‍♂️','🚴🏼‍♀️','🚴🏻‍♂️','🚴🏻‍♀️','🚣🏿‍♂️','👱🏻‍♀️','👱🏻‍♂️','👱🏼‍♀️','👱🏼‍♂️','👱🏽‍♀️','👱🏽‍♂️','👱🏾‍♀️','👱🏾‍♂️','👱🏿‍♀️','👱🏿‍♂️','🚣🏿‍♀️','🚣🏾‍♂️','👳🏻‍♀️','👳🏻‍♂️','👳🏼‍♀️','👳🏼‍♂️','👳🏽‍♀️','👳🏽‍♂️','👳🏾‍♀️','👳🏾‍♂️','👳🏿‍♀️','👳🏿‍♂️','🚣🏾‍♀️','🚣🏽‍♂️','👷🏻‍♀️','👷🏻‍♂️','👷🏼‍♀️','👷🏼‍♂️','👷🏽‍♀️','👷🏽‍♂️','👷🏾‍♀️','👷🏾‍♂️','👷🏿‍♀️','👷🏿‍♂️','🚣🏽‍♀️','🚣🏼‍♂️','💁🏻‍♀️','💁🏻‍♂️','💁🏼‍♀️','💁🏼‍♂️','💁🏽‍♀️','💁🏽‍♂️','💁🏾‍♀️','💁🏾‍♂️','💁🏿‍♀️','💁🏿‍♂️','🚣🏼‍♀️','🚣🏻‍♂️','🏃🏻‍♀️','💂🏻‍♂️','💂🏼‍♀️','💂🏼‍♂️','💂🏽‍♀️','💂🏽‍♂️','💂🏾‍♀️','💂🏾‍♂️','💂🏿‍♀️','💂🏿‍♂️','🚣🏻‍♀️','🙎🏿‍♂️','💆🏻‍♀️','💆🏻‍♂️','💆🏼‍♀️','💆🏼‍♂️','💆🏽‍♀️','💆🏽‍♂️','💆🏾‍♀️','💆🏾‍♂️','💆🏿‍♀️','💆🏿‍♂️','🙎🏿‍♀️','🙎🏾‍♂️','💇🏻‍♀️','💇🏻‍♂️','💇🏼‍♀️','💇🏼‍♂️','💇🏽‍♀️','💇🏽‍♂️','💇🏾‍♀️','💇🏾‍♂️','💇🏿‍♀️','💇🏿‍♂️','🙎🏾‍♀️','🙎🏽‍♂️','🕵🏻‍♀️','🕵🏻‍♂️','🕵🏼‍♀️','🕵🏼‍♂️','🕵🏽‍♀️','🕵🏽‍♂️','🕵🏾‍♀️','🕵🏾‍♂️','🕵🏿‍♀️','🕵🏿‍♂️','🙅🏻‍♀️','🙅🏻‍♂️','🙅🏼‍♀️','🙅🏼‍♂️','🙅🏽‍♀️','🙅🏽‍♂️','🙅🏾‍♀️','🙅🏾‍♂️','🙅🏿‍♀️','🙅🏿‍♂️','🙎🏽‍♀️','🙎🏼‍♂️','🙆🏻‍♀️','🙆🏻‍♂️','🙆🏼‍♀️','🙆🏼‍♂️','🙆🏽‍♀️','🙆🏽‍♂️','🙆🏾‍♀️','🙆🏾‍♂️','🙆🏿‍♀️','🙆🏿‍♂️','🙎🏼‍♀️','🙎🏻‍♂️','🙇🏻‍♀️','🙇🏻‍♂️','🙇🏼‍♀️','🙇🏼‍♂️','🙇🏽‍♀️','🙇🏽‍♂️','🙇🏾‍♀️','🙇🏾‍♂️','🙇🏿‍♀️','🙇🏿‍♂️','🙎🏻‍♀️','🙍🏿‍♂️','🙋🏻‍♀️','🙋🏻‍♂️','🙋🏼‍♀️','🙋🏼‍♂️','🙋🏽‍♀️','🙋🏽‍♂️','🙋🏾‍♀️','🙋🏾‍♂️','🙋🏿‍♀️','🙋🏿‍♂️','🙍🏿‍♀️','🙍🏾‍♂️','🙍🏻‍♀️','🙍🏻‍♂️','🙍🏼‍♀️','🙍🏼‍♂️','🙍🏽‍♀️','🙍🏽‍♂️','🙍🏾‍♀️','🏋️‍♂️','⛹🏾‍♀️','🏌️‍♀️','🕵️‍♀️','🕵️‍♂️','🏌️‍♂️','⛹🏻‍♂️','⛹🏻‍♀️','⛹🏾‍♂️','⛹🏿‍♀️','⛹🏿‍♂️','⛹🏽‍♀️','⛹🏽‍♂️','⛹🏼‍♀️','🏋️‍♀️','⛹🏼‍♂️','⛹️‍♂️','⛹️‍♀️','👨🏼‍🌾','👩🏿‍🚒','👩🏿‍🚀','👩🏿‍🔬','👩🏿‍🔧','👩🏿‍💼','👩🏿‍💻','👩🏿‍🏭','👩🏿‍🏫','👩🏿‍🎨','👩🏿‍🎤','👩🏿‍🎓','👩🏿‍🍳','👩🏿‍🌾','👩🏾‍🚒','👩🏾‍🚀','👩🏾‍🔬','👩🏾‍🔧','👩🏾‍💼','👩🏾‍💻','👩🏾‍🏭','👩🏾‍🏫','👩🏾‍🎨','👩🏾‍🎤','👩🏾‍🎓','👩🏾‍🍳','👩🏾‍🌾','👩🏽‍🚒','👩🏽‍🚀','👩🏽‍🔬','👩🏽‍🔧','👩🏽‍💼','👩🏽‍💻','👩🏽‍🏭','👩🏽‍🏫','👩🏽‍🎨','👩🏽‍🎤','👩🏽‍🎓','👩🏽‍🍳','👩🏽‍🌾','👩🏼‍🚒','👩🏼‍🚀','👩🏼‍🔬','👩🏼‍🔧','👩🏼‍💼','👩🏼‍💻','👩🏼‍🏭','👩🏼‍🏫','👩🏼‍🎨','👩🏼‍🎤','👩🏼‍🎓','👩🏼‍🍳','👩🏼‍🌾','👩🏻‍🚒','👩🏻‍🚀','👩🏻‍🔬','👩🏻‍🔧','👩🏻‍💼','👩🏻‍💻','👩🏻‍🏭','👩🏻‍🏫','👩🏻‍🎨','👩🏻‍🎤','👩🏻‍🎓','👨🏻‍🚒','👩🏻‍🌾','👨🏻‍🌾','👨🏻‍🍳','👨🏻‍🎓','👨🏻‍🎤','👨🏻‍🎨','👨🏻‍🏫','👨🏻‍🏭','👨🏻‍💻','👨🏻‍💼','👨🏻‍🔧','👨🏻‍🔬','👨🏻‍🚀','👨🏿‍🚒','👨🏿‍🚀','👨🏿‍🔬','👨🏿‍🔧','👨🏿‍💼','👨🏿‍💻','👨🏿‍🏭','👨🏿‍🏫','👨🏿‍🎨','👨🏿‍🎤','👨🏿‍🎓','👨🏿‍🍳','👨🏿‍🌾','👨🏾‍🚒','👨🏾‍🚀','👨🏾‍🔬','👨🏾‍🔧','👨🏾‍💼','👨🏾‍💻','👨🏾‍🏭','👨🏾‍🏫','👨🏾‍🎨','👨🏾‍🎤','👨🏾‍🎓','👨🏾‍🍳','👨🏾‍🌾','👨🏽‍🚒','👨🏽‍🚀','👨🏽‍🔬','👨🏽‍🔧','👨🏽‍💼','👨🏽‍💻','👨🏽‍🏭','👨🏽‍🏫','👨🏽‍🎨','👨🏽‍🎤','👨🏽‍🎓','👨🏽‍🍳','👨🏽‍🌾','👨🏼‍🚒','👨🏼‍🚀','👨🏼‍🔬','👨🏼‍🔧','👨🏼‍💼','👨🏼‍💻','👨🏼‍🏭','👨🏼‍🏫','👨🏼‍🎨','👨🏼‍🎤','👨🏼‍🎓','👨🏼‍🍳','👩🏻‍🍳','🏳️‍🌈','👨‍⚖️','👨‍⚕️','🧝‍♀️','🤾‍♀️','🤾‍♂️','💂‍♀️','💁‍♂️','💁‍♀️','👷‍♂️','👷‍♀️','👳‍♂️','🤦‍♀️','🤦‍♂️','👳‍♀️','🧜‍♂️','🧖‍♀️','🧖‍♂️','🧜‍♀️','👱‍♂️','👱‍♀️','👯‍♂️','🚣‍♀️','🚣‍♂️','👯‍♀️','👮‍♂️','👮‍♀️','👩‍✈️','🧗‍♀️','🧗‍♂️','🤷‍♀️','🤷‍♂️','👩‍⚖️','👩‍⚕️','🏃‍♀️','🏃‍♂️','🏄‍♀️','🏄‍♂️','🚴‍♀️','🚴‍♂️','🧘‍♀️','🧘‍♂️','🏊‍♀️','🏊‍♂️','🤸‍♀️','🤸‍♂️','🙋‍♂️','🙇‍♂️','🙍‍♀️','🏴‍☠️','🧟‍♂️','🧟‍♀️','🧙‍♀️','🧙‍♂️','🧞‍♂️','🧞‍♀️','🚵‍♀️','🚵‍♂️','🤹‍♀️','🤹‍♂️','🤼‍♀️','🤼‍♂️','🧝‍♂️','🙍‍♂️','🧚‍♀️','🧚‍♂️','🙇‍♀️','🙆‍♂️','🙆‍♀️','🙅‍♂️','🙅‍♀️','💇‍♂️','💇‍♀️','💆‍♂️','🙋‍♀️','🤽‍♂️','🧛‍♀️','🧛‍♂️','🚶‍♀️','🚶‍♂️','💆‍♀️','💂‍♂️','🙎‍♀️','🙎‍♂️','👨‍✈️','🤽‍♀️','👨‍🌾','👨‍🎓','👨‍🎤','👨‍🎨','👨‍🏫','👨‍🏭','👨‍👦','👨‍👧','👨‍💻','👨‍💼','👨‍🔧','👨‍🔬','👨‍🚀','👁‍🗨','👨‍🚒','👨‍🍳','👩‍🍳','👩‍🎓','👩‍🎤','👩‍🎨','👩‍🏫','👩‍🏭','👩‍👦','👩‍👧','👩‍💻','👩‍💼','👩‍🔧','👩‍🔬','👩‍🚀','👩‍🚒','👩‍🌾','🇧🇲','🇧🇳','👱🏾','🏊🏼','🇧🇴','👱🏿','🇧🇶','🏊🏽','👲🏻','👲🏼','👲🏽','👲🏾','👲🏿','🇧🇷','🇧🇸','👳🏻','🏊🏾','🇧🇹','👳🏼','🇧🇻','🏊🏿','👳🏽','🇧🇼','🇧🇾','👳🏾','🇧🇿','🇨🇦','👳🏿','🏋🏻','🇨🇨','👴🏻','👴🏼','👴🏽','👴🏾','👴🏿','👵🏻','👵🏼','👵🏽','👵🏾','👵🏿','👶🏻','👶🏼','👶🏽','👶🏾','👶🏿','🇨🇩','🏋🏼','👷🏻','🇨🇫','🇨🇬','👷🏼','🏋🏽','🇨🇭','👷🏽','🇨🇮','🏋🏾','👷🏾','🇨🇰','🇨🇱','👷🏿','🏋🏿','🇨🇲','👸🏻','👸🏼','👸🏽','👸🏾','👸🏿','👼🏻','👼🏼','👼🏽','👼🏾','👼🏿','🇨🇳','🇨🇴','💁🏻','🇨🇵','🏌🏻','💁🏼','🇨🇷','🇨🇺','💁🏽','🏌🏼','🇨🇻','💁🏾','🇨🇼','🏌🏽','💁🏿','🇨🇽','🇨🇾','🏌🏾','🇨🇿','💂🏻','🇩🇪','🏌🏿','💂🏼','🇩🇬','🇩🇯','💂🏽','🇩🇰','🇩🇲','💂🏾','🇩🇴','🇩🇿','💂🏿','🇪🇦','🇪🇨','💃🏻','💃🏼','💃🏽','💃🏾','💃🏿','💅🏻','💅🏼','💅🏽','💅🏾','💅🏿','👂🏻','👂🏼','💆🏻','👂🏽','👂🏾','💆🏼','👂🏿','👃🏻','💆🏽','👃🏼','👃🏽','💆🏾','👃🏾','👃🏿','💆🏿','👆🏻','👆🏼','👆🏽','👆🏾','💇🏻','👆🏿','👇🏻','💇🏼','👇🏼','👇🏽','💇🏽','👇🏾','👇🏿','💇🏾','👈🏻','👈🏼','💇🏿','👈🏽','👈🏾','💪🏻','💪🏼','💪🏽','💪🏾','💪🏿','🕴🏻','🕴🏼','🕴🏽','🕴🏾','🕴🏿','👈🏿','👉🏻','🕵🏻','👉🏼','👉🏽','🕵🏼','👉🏾','👉🏿','🕵🏽','👊🏻','👊🏼','🕵🏾','👊🏽','👊🏾','🕵🏿','👊🏿','👋🏻','🕺🏻','🕺🏼','🕺🏽','🕺🏾','🕺🏿','🖐🏻','🖐🏼','🖐🏽','🖐🏾','🖐🏿','🖕🏻','🖕🏼','🖕🏽','🖕🏾','🖕🏿','🖖🏻','🖖🏼','🖖🏽','🖖🏾','🖖🏿','👋🏼','👋🏽','🙅🏻','👋🏾','👋🏿','🙅🏼','👌🏻','👌🏼','🙅🏽','🇦🇨','👌🏾','🙅🏾','👌🏿','👍🏻','🙅🏿','👍🏼','👍🏽','👍🏾','👍🏿','🙆🏻','👎🏻','👎🏼','🙆🏼','👎🏽','👎🏾','🙆🏽','👎🏿','👏🏻','🙆🏾','👏🏼','👏🏽','🙆🏿','👏🏾','👏🏿','👐🏻','👐🏼','🙇🏻','👐🏽','👐🏾','🙇🏼','👐🏿','👦🏻','🙇🏽','👦🏼','👦🏽','🙇🏾','👦🏾','👦🏿','🙇🏿','👧🏻','👧🏼','👧🏽','👧🏾','🙋🏻','👧🏿','🇪🇪','🙋🏼','🇪🇬','🇪🇭','🙋🏽','🇪🇷','🇪🇸','🙋🏾','🇪🇹','🇪🇺','🙋🏿','🇫🇮','🇫🇯','🙌🏻','🙌🏼','🙌🏽','🙌🏾','🙌🏿','🇫🇰','🇫🇲','🙍🏻','🇫🇴','🇫🇷','🙍🏼','🇬🇦','🇬🇧','🙍🏽','🇬🇩','👨🏻','🙍🏾','🇬🇪','🇬🇫','🙍🏿','🇬🇬','🇬🇭','🇬🇮','🇬🇱','🙎🏻','🇬🇲','🇬🇳','🙎🏼','🇬🇵','🇬🇶','🙎🏽','🇬🇷','🇬🇸','🙎🏾','🇬🇹','🇬🇺','🙎🏿','🇬🇼','🇬🇾','🙏🏻','🙏🏼','🙏🏽','🙏🏾','🙏🏿','👨🏼','🇭🇰','🚣🏻','🇭🇲','🇭🇳','🚣🏼','🇭🇷','🇭🇹','🚣🏽','🇭🇺','🇮🇨','🚣🏾','🇮🇩','🇮🇪','🚣🏿','🇮🇱','🇮🇲','🇮🇳','🇮🇴','🚴🏻','🇮🇶','🇮🇷','🚴🏼','🇮🇸','👨🏽','🚴🏽','🇮🇹','🇯🇪','🚴🏾','🇯🇲','🇯🇴','🚴🏿','🇯🇵','🇰🇪','🇰🇬','🇰🇭','🚵🏻','🇰🇮','🇰🇲','🚵🏼','🇰🇳','🇰🇵','🚵🏽','🇰🇷','🇰🇼','🚵🏾','🇰🇾','🇰🇿','🚵🏿','👨🏾','🇱🇦','🇱🇧','🇱🇨','🚶🏻','🇱🇮','🇱🇰','🚶🏼','🇱🇷','🇱🇸','🚶🏽','🇱🇹','🇱🇺','🚶🏾','🇱🇻','🇱🇾','🚶🏿','🇲🇦','🇲🇨','🛀🏻','🛀🏼','🛀🏽','🛀🏾','🛀🏿','🛌🏻','🛌🏼','🛌🏽','🛌🏾','🛌🏿','🤘🏻','🤘🏼','🤘🏽','🤘🏾','🤘🏿','🤙🏻','🤙🏼','🤙🏽','🤙🏾','🤙🏿','🤚🏻','🤚🏼','🤚🏽','🤚🏾','🤚🏿','🤛🏻','🤛🏼','🤛🏽','🤛🏾','🤛🏿','🤜🏻','🤜🏼','🤜🏽','🤜🏾','🤜🏿','🤞🏻','🤞🏼','🤞🏽','🤞🏾','🤞🏿','🤟🏻','🤟🏼','🤟🏽','🤟🏾','🤟🏿','🇲🇩','🇲🇪','🤦🏻','🇲🇫','👨🏿','🤦🏼','🇲🇬','🇲🇭','🤦🏽','🇲🇰','🇲🇱','🤦🏾','🇲🇲','🇲🇳','🤦🏿','🇲🇴','🇲🇵','🤰🏻','🤰🏼','🤰🏽','🤰🏾','🤰🏿','🤱🏻','🤱🏼','🤱🏽','🤱🏾','🤱🏿','🤲🏻','🤲🏼','🤲🏽','🤲🏾','🤲🏿','🤳🏻','🤳🏼','🤳🏽','🤳🏾','🤳🏿','🤴🏻','🤴🏼','🤴🏽','🤴🏾','🤴🏿','🤵🏻','🤵🏼','🤵🏽','🤵🏾','🤵🏿','🤶🏻','🤶🏼','🤶🏽','🤶🏾','🤶🏿','🇲🇶','🇲🇷','🤷🏻','🇲🇸','🇲🇹','🤷🏼','🇲🇺','🇲🇻','🤷🏽','🇲🇼','🇲🇽','🤷🏾','🇲🇾','🇲🇿','🤷🏿','🇳🇦','🇳🇨','🇳🇪','🇳🇫','🤸🏻','🇳🇬','🇳🇮','🤸🏼','🇳🇱','🇳🇴','🤸🏽','🇳🇵','🇳🇷','🤸🏾','🇳🇺','🇳🇿','🤸🏿','🇴🇲','🇵🇦','🇵🇪','🇵🇫','🤹🏻','🇵🇬','🇵🇭','🤹🏼','🇵🇰','🇵🇱','🤹🏽','🇵🇲','🇵🇳','🤹🏾','🇵🇷','🇵🇸','🤹🏿','🇵🇹','🇵🇼','🇵🇾','🇶🇦','🇷🇪','🇷🇴','🤽🏻','🇷🇸','👩🏻','🤽🏼','🇷🇺','🇷🇼','🤽🏽','🇸🇦','🇸🇧','🤽🏾','🇸🇨','🇸🇩','🤽🏿','🇸🇪','🇸🇬','🇦🇩','🇸🇮','🤾🏻','🇸🇯','🇸🇰','🤾🏼','🇸🇱','🇸🇲','🤾🏽','🇸🇳','🇸🇴','🤾🏾','👩🏼','🇸🇷','🤾🏿','🇸🇸','🇸🇹','🧑🏻','🧑🏼','🧑🏽','🧑🏾','🧑🏿','🧒🏻','🧒🏼','🧒🏽','🧒🏾','🧒🏿','🧓🏻','🧓🏼','🧓🏽','🧓🏾','🧓🏿','🧔🏻','🧔🏼','🧔🏽','🧔🏾','🧔🏿','🧕🏻','🧕🏼','🧕🏽','🧕🏾','🧕🏿','🇸🇻','🇸🇽','🧖🏻','🇸🇾','🇸🇿','🧖🏼','🇹🇦','🇹🇨','🧖🏽','🇹🇩','🇹🇫','🧖🏾','🇹🇬','🇹🇭','🧖🏿','🇹🇯','🇹🇰','🇹🇱','👩🏽','🧗🏻','🇹🇲','🇹🇳','🧗🏼','🇹🇴','🇹🇷','🧗🏽','🇹🇹','🇹🇻','🧗🏾','🇹🇼','🇹🇿','🧗🏿','🇺🇦','🇺🇬','🇺🇲','🇺🇳','🧘🏻','🇺🇸','🇺🇾','🧘🏼','🇺🇿','🇻🇦','🧘🏽','👩🏾','🇻🇨','🧘🏾','🇻🇪','🇻🇬','🧘🏿','🇻🇮','🇻🇳','🇻🇺','🇼🇫','🧙🏻','🇼🇸','🇽🇰','🧙🏼','🇾🇪','🇾🇹','🧙🏽','🇿🇦','🇿🇲','🧙🏾','🇿🇼','🎅🏻','🧙🏿','🎅🏼','👩🏿','🎅🏽','🎅🏾','🧚🏻','🎅🏿','🏂🏻','🧚🏼','🏂🏼','🏂🏽','🧚🏽','🏂🏾','🏂🏿','🧚🏾','👌🏽','🇦🇪','🧚🏿','🏃🏻','🇦🇫','🇦🇬','🏃🏼','🧛🏻','🇦🇮','🇦🇱','🧛🏼','🏃🏽','🇦🇲','🧛🏽','🇦🇴','🏃🏾','🧛🏾','🇦🇶','🇦🇷','🧛🏿','🏃🏿','🇦🇸','🇦🇹','🇦🇺','🧜🏻','🇦🇼','🏄🏻','🧜🏼','🇦🇽','🇦🇿','🧜🏽','🏄🏼','🇧🇦','🧜🏾','👮🏻','🇧🇧','🧜🏿','🏄🏽','👮🏼','🇧🇩','🇧🇪','🧝🏻','👮🏽','🏄🏾','🧝🏼','🇧🇫','👮🏾','🧝🏽','🇧🇬','🏄🏿','🧝🏾','👮🏿','🇧🇭','🧝🏿','🇧🇮','🏇🏻','🏇🏼','👰🏻','👰🏼','👰🏽','👰🏾','👰🏿','🏇🏽','🏇🏾','👱🏻','🏇🏿','🇧🇯','👱🏼','🇧🇱','🏊🏻','👱🏽','🇸🇭','✍🏿','⛹🏻','✍🏾','✍🏽','✍🏼','✍🏻','✌🏿','✌🏾','✌🏽','✌🏼','✌🏻','✋🏿','✋🏾','✋🏽','✋🏼','✋🏻','✊🏿','✊🏾','✊🏽','✊🏼','✊🏻','⛷🏽','⛷🏾','⛹🏿','☝🏿','☝🏾','⛹🏾','☝🏽','☝🏼','⛹🏽','☝🏻','⛷🏿','⛹🏼','⛷🏻','⛷🏼','4⃣','#⃣','0⃣','1⃣','2⃣','3⃣','*⃣','5⃣','6⃣','7⃣','8⃣','9⃣','🇳','🕔','🕕','🕖','🕗','🕘','🕙','🕚','🕛','🕜','🕝','🕞','🕟','🕠','🕡','🕢','🕣','🕤','🕥','🕦','🕧','🕯','🕰','🕳','🎇','🎈','🎉','🎊','🎋','🕴','🎌','🎍','🎎','🎏','🎐','🎑','🎒','🎓','🎖','🎗','🎙','🎚','🎛','🎞','🎟','🎠','🎡','🕵','🕶','🕷','🕸','🕹','🎢','🎣','🎤','🎥','🎦','🕺','🖇','🖊','🖋','🖌','🖍','🎧','🎨','🎩','🎪','🎫','🖐','🎬','🎭','🎮','🎯','🎰','🖕','🎱','🎲','🎳','🎴','🎵','🖖','🖤','🖥','🖨','🖱','🖲','🖼','🗂','🗃','🗄','🗑','🗒','🗓','🗜','🗝','🗞','🗡','🗣','🗨','🗯','🗳','🗺','🗻','🗼','🗽','🗾','🗿','😀','😁','😂','😃','😄','😅','😆','😇','😈','😉','😊','😋','😌','😍','😎','😏','😐','😑','😒','😓','😔','😕','😖','😗','😘','😙','😚','😛','😜','😝','😞','😟','😠','😡','😢','😣','😤','😥','😦','😧','😨','😩','😪','😫','😬','😭','😮','😯','😰','😱','😲','😳','😴','😵','😶','😷','😸','😹','😺','😻','😼','😽','😾','😿','🙀','🙁','🙂','🙃','🙄','🎶','🎷','🎸','🎹','🎺','🎻','🎼','🎽','🎾','🎿','🏀','🏁','🇧','🇮','🇪','🇷','🇱','🙅','🏂','🆎','🆑','🇨','🇹','🇯','🆒','🇬','🆓','🃏','🆔','🇴','🇺','🇫','🆕','🆖','🆗','🙆','🇭','🏃','🆘','🇩','🇻','🇰','🆙','🇼','🆚','🇽','🇸','🀄','🇾','🇦','🅰','🅱','🇿','🙇','🙈','🙉','🙊','🈁','🈂','🏄','🏅','🏆','🈚','🈯','🈲','🈳','🈴','🏇','👨','🏈','🏉','🈵','🈶','🈷','🙋','🈸','🈹','🈺','🉐','🉑','🙌','🌀','🌁','🌂','🌃','🌄','🌅','🌆','🌇','🌈','🏊','🌉','🌊','🌋','🌌','🌍','🌎','🌏','🙍','🌐','🌑','🌒','🌓','🌔','🌕','🌖','🌗','🌘','🌙','🏋','🌚','🌛','🌜','🌝','🌞','🌟','🙎','🌠','🌡','🌤','🌥','🌦','🙏','🚀','🚁','🚂','🚃','🚄','🚅','🚆','🚇','🚈','🚉','🚊','🚋','🚌','🚍','🚎','🚏','🚐','🚑','🚒','🚓','🚔','🚕','🚖','🚗','🚘','🚙','🚚','🚛','🚜','🚝','🚞','🚟','🚠','🚡','🚢','🌧','🌨','🌩','🌪','🌫','🌬','🏌','🏍','🏎','🏏','🏐','🏑','🏒','🏓','🏔','🏕','🏖','🚣','🚤','🚥','🚦','🚧','🚨','🚩','🚪','🚫','🚬','🚭','🚮','🚯','🚰','🚱','🚲','🚳','🏗','🏘','🏙','🏚','🏛','🏜','🏝','🏞','🏟','🏠','🏡','🏢','🏣','🏤','🏥','🏦','🏧','🚴','🏨','🏩','🏪','🏫','🏬','🏭','🏮','🏯','🏰','🌭','🏳','🌮','🌯','🌰','🌱','🏴','🏵','🚵','🏷','🏸','🏹','🏺','🏻','🏼','🏽','🏾','🏿','🐀','🐁','🐂','🐃','🐄','🐅','👩','👪','🚶','🚷','🚸','🚹','🚺','🚻','🚼','🚽','🚾','🚿','👫','👬','👭','🐆','🐇','🛀','🛁','🛂','🛃','🛄','🛅','🛋','🐈','🐉','🐊','🐋','🐌','🛌','🛍','🛎','🛏','🛐','🛑','🛒','🛠','🛡','🛢','🛣','🛤','🛥','🛩','🛫','🛬','🛰','🛳','🛴','🛵','🛶','🛷','🛸','🤐','🤑','🤒','🤓','🤔','🤕','🤖','🤗','🐍','🐎','🐏','🐐','🐑','🤘','🐒','🐓','🐔','🐕','🐖','🤙','👮','🐗','🐘','👯','🐙','🤚','🐚','🐛','🐜','🐝','👰','🤛','🐞','🐟','🐠','🐡','🐢','🤜','🤝','🐣','🐤','🐥','🐦','🐧','🤞','🐨','🐩','🐪','🐫','🐬','🤟','🤠','🤡','🤢','🤣','🤤','🤥','🐭','🐮','👱','🐯','🐰','🐱','🐲','🐳','👲','🐴','🐵','🐶','🐷','🐸','🐹','🐺','🐻','🤦','🤧','🤨','🤩','🤪','🤫','🤬','🤭','🤮','🤯','🐼','🐽','🐾','🐿','👀','🤰','🌲','👁','🌳','🌴','👳','🤱','🌵','🌶','🌷','👂','🌸','🤲','👴','🌹','🌺','🌻','🌼','🤳','👃','👵','👄','👅','🌽','🤴','🌾','🌿','👶','🍀','🍁','🤵','👆','🍂','🍃','🍄','🍅','🤶','🍆','👇','🍇','🍈','🍉','🍊','🍋','👈','🍌','🍍','👷','🍎','🍏','🍐','👉','🍑','👸','🤷','👹','👺','👻','🍒','🍓','🍔','🍕','👊','👼','👽','👾','👿','💀','🍖','🍗','🍘','🍙','🤸','🍚','👋','🍛','🍜','🍝','🍞','🍟','👌','🍠','🍡','🍢','🍣','🍤','💁','👍','🍥','🍦','🤹','🤺','🍧','🍨','🤼','🍩','👎','🍪','🍫','🍬','🍭','🍮','👏','🍯','🍰','🍱','🍲','💂','🍳','👐','👑','👒','🤽','👓','💃','💄','👔','👕','👖','👗','👘','💅','👙','👚','👛','👜','👝','👞','👟','👠','🤾','🥀','🥁','🥂','🥃','🥄','🥅','🥇','🥈','🥉','🥊','🥋','🥌','🥐','🥑','🥒','🥓','🥔','🥕','🥖','🥗','🥘','🥙','🥚','🥛','🥜','🥝','🥞','🥟','🥠','🥡','🥢','🥣','🥤','🥥','🥦','🥧','🥨','🥩','🥪','🥫','🦀','🦁','🦂','🦃','🦄','🦅','🦆','🦇','🦈','🦉','🦊','🦋','🦌','🦍','🦎','🦏','🦐','🦑','🦒','🦓','🦔','🦕','🦖','🦗','🧀','🧐','👡','👢','👣','👤','👥','🧑','🍴','🍵','🍶','🍷','💆','🧒','🍸','👦','🍹','🍺','🍻','🧓','🍼','🍽','👧','🍾','🍿','🧔','🎀','🎁','🎂','🎃','🎄','🧕','🇵','🅾','💇','💈','💉','💊','💋','💌','💍','💎','💏','💐','💑','💒','💓','💔','💕','🧖','💖','💗','💘','💙','💚','💛','💜','💝','💞','💟','💠','💡','💢','💣','💤','💥','💦','🧗','💧','💨','💩','🇶','🇲','🅿','🎅','🎆','💪','💫','💬','💭','💮','💯','💰','💱','💲','🧘','💳','💴','💵','💶','💷','💸','💹','💺','💻','💼','💽','💾','💿','📀','📁','📂','📃','🧙','📄','📅','📆','📇','📈','📉','📊','📋','📌','📍','📎','📏','📐','📑','📒','📓','📔','🧚','📕','📖','📗','📘','📙','📚','📛','📜','📝','📞','📟','📠','📡','📢','📣','📤','📥','🧛','📦','📧','📨','📩','📪','📫','📬','📭','📮','📯','📰','📱','📲','📳','📴','📵','📶','🧜','📷','📸','📹','📺','📻','📼','📽','📿','🔀','🔁','🔂','🔃','🔄','🔅','🔆','🔇','🔈','🧝','🔉','🔊','🧞','🔋','🔌','🧟','🧠','🧡','🧢','🧣','🧤','🧥','🧦','🔍','🔎','🔏','🔐','🔑','🔒','🔓','🔔','🔕','🔖','🔗','🔘','🔙','🔚','🔛','🔜','🔝','🔞','🔟','🔠','🔡','🔢','🔣','🔤','🔥','🔦','🔧','🔨','🔩','🔪','🔫','🔬','🔭','🔮','🔯','🔰','🔱','🔲','🔳','🔴','🔵','🔶','🔷','🔸','🔹','🔺','🔻','🔼','🔽','🕉','🕊','🕋','🕌','🕍','🕎','🕐','🕑','🕒','🕓','▪','☦','☮','☯','☸','☹','☺','♀','♂','♈','♉','♊','♋','♌','♍','♎','♏','♐','♑','♒','♓','♠','♣','♥','♦','♨','♻','♿','⚒','⚓','⚔','⚕','⚖','⚗','⚙','⚛','⚜','⚠','⚡','⚪','⚫','⚰','⚱','⚽','⚾','⛄','⛅','⛈','⛎','⛏','⛑','⛓','⛔','⛩','⛪','⛰','⛱','⛲','⛳','⛴','⛵','☣','☢','☠','☝','☘','⛷','⛸','☕','☔','☑','☎','☄','☃','☂','☁','☀','◾','◽','◼','◻','◀','▶','▫','☪','⛹','⛺','⛽','✂','✅','✈','✉','Ⓜ','⏺','⏹','⏸','⏳','✊','⏲','⏱','⏰','⏯','⏮','✋','⏭','⏬','⏫','⏪','⏩','✌','⏏','⌨','⌛','⌚','↪','✍','✏','✒','✔','✖','✝','✡','✨','✳','✴','❄','❇','❌','❎','❓','❔','❕','❗','❣','❤','➕','➖','➗','➡','➰','➿','⤴','⤵','↩','⬅','⬆','⬇','⬛','⬜','⭐','⭕','↙','〰','〽','↘','↗','㊗','㊙','↖','↕','↔','ℹ','™','⁉','‼','');5325 $partials = array( '🀄','🃏','🅰','🅱','🅾','🅿','🆎','🆑','🆒','🆓','🆔','🆕','🆖','🆗','🆘','🆙','🆚','🇦','🇨','🇩','🇪','🇫','🇬','🇮','🇱','🇲','🇴','🇶','🇷','🇸','🇹','🇺','🇼','🇽','🇿','🇧','🇭','🇯','🇳','🇻','🇾','🇰','🇵','🈁','🈂','🈚','🈯','🈲','🈳','🈴','🈵','🈶','🈷','🈸','🈹','🈺','🉐','🉑','🌀','🌁','🌂','🌃','🌄','🌅','🌆','🌇','🌈','🌉','🌊','🌋','🌌','🌍','🌎','🌏','🌐','🌑','🌒','🌓','🌔','🌕','🌖','🌗','🌘','🌙','🌚','🌛','🌜','🌝','🌞','🌟','🌠','🌡','🌤','🌥','🌦','🌧','🌨','🌩','🌪','🌫','🌬','🌭','🌮','🌯','🌰','🌱','🌲','🌳','🌴','🌵','🌶','🌷','🌸','🌹','🌺','🌻','🌼','🌽','🌾','🌿','🍀','🍁','🍂','🍃','🍄','🍅','🍆','🍇','🍈','🍉','🍊','🍋','🍌','🍍','🍎','🍏','🍐','🍑','🍒','🍓','🍔','🍕','🍖','🍗','🍘','🍙','🍚','🍛','🍜','🍝','🍞','🍟','🍠','🍡','🍢','🍣','🍤','🍥','🍦','🍧','🍨','🍩','🍪','🍫','🍬','🍭','🍮','🍯','🍰','🍱','🍲','🍳','🍴','🍵','🍶','🍷','🍸','🍹','🍺','🍻','🍼','🍽','🍾','🍿','🎀','🎁','🎂','🎃','🎄','🎅','🏻','🏼','🏽','🏾','🏿','🎆','🎇','🎈','🎉','🎊','🎋','🎌','🎍','🎎','🎏','🎐','🎑','🎒','🎓','🎖','🎗','🎙','🎚','🎛','🎞','🎟','🎠','🎡','🎢','🎣','🎤','🎥','🎦','🎧','🎨','🎩','🎪','🎫','🎬','🎭','🎮','🎯','🎰','🎱','🎲','🎳','🎴','🎵','🎶','🎷','🎸','🎹','🎺','🎻','🎼','🎽','🎾','🎿','🏀','🏁','🏂','🏃','‍','♀','️','♂','🏄','🏅','🏆','🏇','🏈','🏉','🏊','🏋','🏌','🏍','🏎','🏏','🏐','🏑','🏒','🏓','🏔','🏕','🏖','🏗','🏘','🏙','🏚','🏛','🏜','🏝','🏞','🏟','🏠','🏡','🏢','🏣','🏤','🏥','🏦','🏧','🏨','🏩','🏪','🏫','🏬','🏭','🏮','🏯','🏰','🏳','🏴','☠','󠁧','󠁢','󠁥','󠁮','󠁿','󠁳','󠁣','󠁴','󠁷','󠁬','🏵','🏷','🏸','🏹','🏺','🐀','🐁','🐂','🐃','🐄','🐅','🐆','🐇','🐈','🐉','🐊','🐋','🐌','🐍','🐎','🐏','🐐','🐑','🐒','🐓','🐔','🐕','🐖','🐗','🐘','🐙','🐚','🐛','🐜','🐝','🐞','🐟','🐠','🐡','🐢','🐣','🐤','🐥','🐦','🐧','🐨','🐩','🐪','🐫','🐬','🐭','🐮','🐯','🐰','🐱','🐲','🐳','🐴','🐵','🐶','🐷','🐸','🐹','🐺','🐻','🐼','🐽','🐾','🐿','👀','👁','🗨','👂','👃','👄','👅','👆','👇','👈','👉','👊','👋','👌','👍','👎','👏','👐','👑','👒','👓','👔','👕','👖','👗','👘','👙','👚','👛','👜','👝','👞','👟','👠','👡','👢','👣','👤','👥','👦','👧','👨','💻','💼','🔧','🔬','🚀','🚒','⚕','⚖','✈','👩','❤','💋','👪','👫','👬','👭','👮','👯','👰','👱','👲','👳','👴','👵','👶','👷','👸','👹','👺','👻','👼','👽','👾','👿','💀','💁','💂','💃','💄','💅','💆','💇','💈','💉','💊','💌','💍','💎','💏','💐','💑','💒','💓','💔','💕','💖','💗','💘','💙','💚','💛','💜','💝','💞','💟','💠','💡','💢','💣','💤','💥','💦','💧','💨','💩','💪','💫','💬','💭','💮','💯','💰','💱','💲','💳','💴','💵','💶','💷','💸','💹','💺','💽','💾','💿','📀','📁','📂','📃','📄','📅','📆','📇','📈','📉','📊','📋','📌','📍','📎','📏','📐','📑','📒','📓','📔','📕','📖','📗','📘','📙','📚','📛','📜','📝','📞','📟','📠','📡','📢','📣','📤','📥','📦','📧','📨','📩','📪','📫','📬','📭','📮','📯','📰','📱','📲','📳','📴','📵','📶','📷','📸','📹','📺','📻','📼','📽','📿','🔀','🔁','🔂','🔃','🔄','🔅','🔆','🔇','🔈','🔉','🔊','🔋','🔌','🔍','🔎','🔏','🔐','🔑','🔒','🔓','🔔','🔕','🔖','🔗','🔘','🔙','🔚','🔛','🔜','🔝','🔞','🔟','🔠','🔡','🔢','🔣','🔤','🔥','🔦','🔨','🔩','🔪','🔫','🔭','🔮','🔯','🔰','🔱','🔲','🔳','🔴','🔵','🔶','🔷','🔸','🔹','🔺','🔻','🔼','🔽','🕉','🕊','🕋','🕌','🕍','🕎','🕐','🕑','🕒','🕓','🕔','🕕','🕖','🕗','🕘','🕙','🕚','🕛','🕜','🕝','🕞','🕟','🕠','🕡','🕢','🕣','🕤','🕥','🕦','🕧','🕯','🕰','🕳','🕴','🕵','🕶','🕷','🕸','🕹','🕺','🖇','🖊','🖋','🖌','🖍','🖐','🖕','🖖','🖤','🖥','🖨','🖱','🖲','🖼','🗂','🗃','🗄','🗑','🗒','🗓','🗜','🗝','🗞','🗡','🗣','🗯','🗳','🗺','🗻','🗼','🗽','🗾','🗿','😀','😁','😂','😃','😄','😅','😆','😇','😈','😉','😊','😋','😌','😍','😎','😏','😐','😑','😒','😓','😔','😕','😖','😗','😘','😙','😚','😛','😜','😝','😞','😟','😠','😡','😢','😣','😤','😥','😦','😧','😨','😩','😪','😫','😬','😭','😮','😯','😰','😱','😲','😳','😴','😵','😶','😷','😸','😹','😺','😻','😼','😽','😾','😿','🙀','🙁','🙂','🙃','🙄','🙅','🙆','🙇','🙈','🙉','🙊','🙋','🙌','🙍','🙎','🙏','🚁','🚂','🚃','🚄','🚅','🚆','🚇','🚈','🚉','🚊','🚋','🚌','🚍','🚎','🚏','🚐','🚑','🚓','🚔','🚕','🚖','🚗','🚘','🚙','🚚','🚛','🚜','🚝','🚞','🚟','🚠','🚡','🚢','🚣','🚤','🚥','🚦','🚧','🚨','🚩','🚪','🚫','🚬','🚭','🚮','🚯','🚰','🚱','🚲','🚳','🚴','🚵','🚶','🚷','🚸','🚹','🚺','🚻','🚼','🚽','🚾','🚿','🛀','🛁','🛂','🛃','🛄','🛅','🛋','🛌','🛍','🛎','🛏','🛐','🛑','🛒','🛠','🛡','🛢','🛣','🛤','🛥','🛩','🛫','🛬','🛰','🛳','🛴','🛵','🛶','🛷','🛸','🤐','🤑','🤒','🤓','🤔','🤕','🤖','🤗','🤘','🤙','🤚','🤛','🤜','🤝','🤞','🤟','🤠','🤡','🤢','🤣','🤤','🤥','🤦','🤧','🤨','🤩','🤪','🤫','🤬','🤭','🤮','🤯','🤰','🤱','🤲','🤳','🤴','🤵','🤶','🤷','🤸','🤹','🤺','🤼','🤽','🤾','🥀','🥁','🥂','🥃','🥄','🥅','🥇','🥈','🥉','🥊','🥋','🥌','🥐','🥑','🥒','🥓','🥔','🥕','🥖','🥗','🥘','🥙','🥚','🥛','🥜','🥝','🥞','🥟','🥠','🥡','🥢','🥣','🥤','🥥','🥦','🥧','🥨','🥩','🥪','🥫','🦀','🦁','🦂','🦃','🦄','🦅','🦆','🦇','🦈','🦉','🦊','🦋','🦌','🦍','🦎','🦏','🦐','🦑','🦒','🦓','🦔','🦕','🦖','🦗','🧀','🧐','🧑','🧒','🧓','🧔','🧕','🧖','🧗','🧘','🧙','🧚','🧛','🧜','🧝','🧞','🧟','🧠','🧡','🧢','🧣','🧤','🧥','🧦','‼','⁉','™','ℹ','↔','↕','↖','↗','↘','↙','↩','↪','⃣','⌚','⌛','⌨','⏏','⏩','⏪','⏫','⏬','⏭','⏮','⏯','⏰','⏱','⏲','⏳','⏸','⏹','⏺','Ⓜ','▪','▫','▶','◀','◻','◼','◽','◾','☀','☁','☂','☃','☄','☎','☑','☔','☕','☘','☝','☢','☣','☦','☪','☮','☯','☸','☹','☺','♈','♉','♊','♋','♌','♍','♎','♏','♐','♑','♒','♓','♠','♣','♥','♦','♨','♻','♿','⚒','⚓','⚔','⚗','⚙','⚛','⚜','⚠','⚡','⚪','⚫','⚰','⚱','⚽','⚾','⛄','⛅','⛈','⛎','⛏','⛑','⛓','⛔','⛩','⛪','⛰','⛱','⛲','⛳','⛴','⛵','⛷','⛸','⛹','⛺','⛽','✂','✅','✉','✊','✋','✌','✍','✏','✒','✔','✖','✝','✡','✨','✳','✴','❄','❇','❌','❎','❓','❔','❕','❗','❣','➕','➖','➗','➡','➰','➿','⤴','⤵','⬅','⬆','⬇','⬛','⬜','⭐','⭕','〰','〽','㊗','㊙','');5606 $entities = array( '👩‍❤️‍💋‍👩', '👩‍❤️‍💋‍👨', '👨‍❤️‍💋‍👨', '🏴󠁧󠁢󠁳󠁣󠁴󠁿', '🏴󠁧󠁢󠁷󠁬󠁳󠁿', '🏴󠁧󠁢󠁥󠁮󠁧󠁿', '👩‍👩‍👧‍👦', '👨‍👨‍👦‍👦', '👩‍👩‍👦‍👦', '👨‍👨‍👧‍👦', '👨‍👨‍👧‍👧', '👨‍👩‍👧‍👧', '👨‍👩‍👦‍👦', '👩‍👩‍👧‍👧', '👨‍👩‍👧‍👦', '👨‍❤️‍👨', '👩‍❤️‍👨', '👩‍❤️‍👩', '👩‍👩‍👦', '👩‍👦‍👦', '👩‍👧‍👦', '👩‍👧‍👧', '👨‍👨‍👦', '👨‍👩‍👧', '👨‍👧‍👧', '👨‍👧‍👦', '👩‍👩‍👧', '👨‍👩‍👦', '👨‍👨‍👧', '👨‍👦‍👦', '🤷🏻‍♂️', '🏋🏻‍♂️', '🏋🏼‍♀️', '🏋🏼‍♂️', '🏋🏽‍♀️', '🏋🏽‍♂️', '🏋🏾‍♀️', '🏋🏾‍♂️', '🏋🏿‍♀️', '🏋🏿‍♂️', '🏌🏻‍♀️', '🏌🏻‍♂️', '🏌🏼‍♀️', '🏌🏼‍♂️', '🏌🏽‍♀️', '🏌🏽‍♂️', '🏌🏾‍♀️', '🏌🏾‍♂️', '🏌🏿‍♀️', '🏌🏿‍♂️', '💂🏻‍♀️', '🏃🏼‍♀️', '🏃🏼‍♂️', '🧝🏿‍♂️', '🧝🏿‍♀️', '🧝🏾‍♂️', '🧝🏾‍♀️', '🧝🏽‍♂️', '🧝🏽‍♀️', '🧝🏼‍♂️', '🧝🏼‍♀️', '🧝🏻‍♂️', '🧝🏻‍♀️', '🧜🏿‍♂️', '🧜🏿‍♀️', '🧜🏾‍♂️', '🧜🏾‍♀️', '👨🏻‍⚕️', '👨🏻‍⚖️', '👨🏻‍✈️', '🧜🏽‍♂️', '🧜🏽‍♀️', '🧜🏼‍♂️', '🧜🏼‍♀️', '🧜🏻‍♂️', '🧜🏻‍♀️', '🧛🏿‍♂️', '🧛🏿‍♀️', '🧛🏾‍♂️', '🧛🏾‍♀️', '🧛🏽‍♂️', '🧛🏽‍♀️', '🧛🏼‍♂️', '👨🏼‍⚕️', '👨🏼‍⚖️', '👨🏼‍✈️', '🧛🏼‍♀️', '🧛🏻‍♂️', '🧛🏻‍♀️', '🧚🏿‍♂️', '🧚🏿‍♀️', '🧚🏾‍♂️', '🧚🏾‍♀️', '🧚🏽‍♂️', '🧚🏽‍♀️', '🧚🏼‍♂️', '🧚🏼‍♀️', '🧚🏻‍♂️', '🧚🏻‍♀️', '👨🏽‍⚕️', '👨🏽‍⚖️', '👨🏽‍✈️', '🧙🏿‍♂️', '🧙🏿‍♀️', '🧙🏾‍♂️', '🧙🏾‍♀️', '🧙🏽‍♂️', '🧙🏽‍♀️', '🧙🏼‍♂️', '🧙🏼‍♀️', '🧙🏻‍♂️', '🧙🏻‍♀️', '🧘🏿‍♂️', '🧘🏿‍♀️', '🧘🏾‍♂️', '👨🏾‍⚕️', '👨🏾‍⚖️', '👨🏾‍✈️', '🧘🏾‍♀️', '🧘🏽‍♂️', '🧘🏽‍♀️', '🧘🏼‍♂️', '🧘🏼‍♀️', '🧘🏻‍♂️', '🧘🏻‍♀️', '🧗🏿‍♂️', '🧗🏿‍♀️', '🧗🏾‍♂️', '🧗🏾‍♀️', '🧗🏽‍♂️', '🧗🏽‍♀️', '👨🏿‍⚕️', '👨🏿‍⚖️', '👨🏿‍✈️', '🧗🏼‍♂️', '🧗🏼‍♀️', '🧗🏻‍♂️', '🧗🏻‍♀️', '🧖🏿‍♂️', '🧖🏿‍♀️', '🧖🏾‍♂️', '🏃🏽‍♀️', '🧖🏾‍♀️', '🏃🏽‍♂️', '🏃🏾‍♀️', '🧖🏽‍♂️', '🏃🏾‍♂️', '🏃🏿‍♀️', '🏃🏿‍♂️', '🏄🏻‍♀️', '🏄🏻‍♂️', '🏄🏼‍♀️', '🏄🏼‍♂️', '🏄🏽‍♀️', '🏄🏽‍♂️', '🏄🏾‍♀️', '🧖🏽‍♀️', '🧖🏼‍♂️', '🧖🏼‍♀️', '🧖🏻‍♂️', '🧖🏻‍♀️', '🤾🏿‍♂️', '🤾🏿‍♀️', '🤾🏾‍♂️', '🤾🏾‍♀️', '🏄🏾‍♂️', '🏄🏿‍♀️', '🤾🏽‍♂️', '🤾🏽‍♀️', '🤾🏼‍♂️', '🤾🏼‍♀️', '🤾🏻‍♂️', '🤾🏻‍♀️', '🤽🏿‍♂️', '🤽🏿‍♀️', '🤽🏾‍♂️', '🤽🏾‍♀️', '🤽🏽‍♂️', '🤽🏽‍♀️', '🤽🏼‍♂️', '👩🏻‍⚕️', '👩🏻‍⚖️', '👩🏻‍✈️', '🤽🏼‍♀️', '🤽🏻‍♂️', '🤽🏻‍♀️', '🤹🏿‍♂️', '🤹🏿‍♀️', '🤹🏾‍♂️', '🤹🏾‍♀️', '🤹🏽‍♂️', '🤹🏽‍♀️', '🤹🏼‍♂️', '🤹🏼‍♀️', '🤹🏻‍♂️', '🤹🏻‍♀️', '👩🏼‍⚕️', '👩🏼‍⚖️', '👩🏼‍✈️', '🤸🏿‍♂️', '🤸🏿‍♀️', '🤸🏾‍♂️', '🤸🏾‍♀️', '🤸🏽‍♂️', '🤸🏽‍♀️', '🤸🏼‍♂️', '🤸🏼‍♀️', '🤸🏻‍♂️', '🤸🏻‍♀️', '🤷🏿‍♂️', '🤷🏿‍♀️', '🤷🏾‍♂️', '👩🏽‍⚕️', '👩🏽‍⚖️', '👩🏽‍✈️', '🤷🏾‍♀️', '🤷🏽‍♂️', '🤷🏽‍♀️', '🤷🏼‍♂️', '🤷🏼‍♀️', '🏃🏻‍♂️', '🤷🏻‍♀️', '🤦🏿‍♂️', '🤦🏿‍♀️', '🤦🏾‍♂️', '🤦🏾‍♀️', '🤦🏽‍♂️', '🤦🏽‍♀️', '👩🏾‍⚕️', '👩🏾‍⚖️', '👩🏾‍✈️', '🤦🏼‍♂️', '🤦🏼‍♀️', '🤦🏻‍♂️', '🤦🏻‍♀️', '🚶🏿‍♂️', '🚶🏿‍♀️', '🚶🏾‍♂️', '🚶🏾‍♀️', '🚶🏽‍♂️', '🚶🏽‍♀️', '🚶🏼‍♂️', '🚶🏼‍♀️', '🚶🏻‍♂️', '👩🏿‍⚕️', '👩🏿‍⚖️', '👩🏿‍✈️', '🚶🏻‍♀️', '🚵🏿‍♂️', '🚵🏿‍♀️', '🚵🏾‍♂️', '🚵🏾‍♀️', '🚵🏽‍♂️', '🚵🏽‍♀️', '🏄🏿‍♂️', '🚵🏼‍♂️', '🏊🏻‍♀️', '🏊🏻‍♂️', '🚵🏼‍♀️', '🏊🏼‍♀️', '🏊🏼‍♂️', '🏊🏽‍♀️', '🏊🏽‍♂️', '🏊🏾‍♀️', '🚵🏻‍♂️', '🚵🏻‍♀️', '🚴🏿‍♂️', '🚴🏿‍♀️', '🚴🏾‍♂️', '🚴🏾‍♀️', '🚴🏽‍♂️', '🚴🏽‍♀️', '🚴🏼‍♂️', '🏊🏾‍♂️', '🏊🏿‍♀️', '🏊🏿‍♂️', '🏋🏻‍♀️', '👮🏻‍♀️', '👮🏻‍♂️', '👮🏼‍♀️', '👮🏼‍♂️', '👮🏽‍♀️', '👮🏽‍♂️', '👮🏾‍♀️', '👮🏾‍♂️', '👮🏿‍♀️', '👮🏿‍♂️', '🚴🏼‍♀️', '🚴🏻‍♂️', '🚴🏻‍♀️', '🚣🏿‍♂️', '👱🏻‍♀️', '👱🏻‍♂️', '👱🏼‍♀️', '👱🏼‍♂️', '👱🏽‍♀️', '👱🏽‍♂️', '👱🏾‍♀️', '👱🏾‍♂️', '👱🏿‍♀️', '👱🏿‍♂️', '🚣🏿‍♀️', '🚣🏾‍♂️', '👳🏻‍♀️', '👳🏻‍♂️', '👳🏼‍♀️', '👳🏼‍♂️', '👳🏽‍♀️', '👳🏽‍♂️', '👳🏾‍♀️', '👳🏾‍♂️', '👳🏿‍♀️', '👳🏿‍♂️', '🚣🏾‍♀️', '🚣🏽‍♂️', '👷🏻‍♀️', '👷🏻‍♂️', '👷🏼‍♀️', '👷🏼‍♂️', '👷🏽‍♀️', '👷🏽‍♂️', '👷🏾‍♀️', '👷🏾‍♂️', '👷🏿‍♀️', '👷🏿‍♂️', '🚣🏽‍♀️', '🚣🏼‍♂️', '💁🏻‍♀️', '💁🏻‍♂️', '💁🏼‍♀️', '💁🏼‍♂️', '💁🏽‍♀️', '💁🏽‍♂️', '💁🏾‍♀️', '💁🏾‍♂️', '💁🏿‍♀️', '💁🏿‍♂️', '🚣🏼‍♀️', '🚣🏻‍♂️', '🏃🏻‍♀️', '💂🏻‍♂️', '💂🏼‍♀️', '💂🏼‍♂️', '💂🏽‍♀️', '💂🏽‍♂️', '💂🏾‍♀️', '💂🏾‍♂️', '💂🏿‍♀️', '💂🏿‍♂️', '🚣🏻‍♀️', '🙎🏿‍♂️', '💆🏻‍♀️', '💆🏻‍♂️', '💆🏼‍♀️', '💆🏼‍♂️', '💆🏽‍♀️', '💆🏽‍♂️', '💆🏾‍♀️', '💆🏾‍♂️', '💆🏿‍♀️', '💆🏿‍♂️', '🙎🏿‍♀️', '🙎🏾‍♂️', '💇🏻‍♀️', '💇🏻‍♂️', '💇🏼‍♀️', '💇🏼‍♂️', '💇🏽‍♀️', '💇🏽‍♂️', '💇🏾‍♀️', '💇🏾‍♂️', '💇🏿‍♀️', '💇🏿‍♂️', '🙎🏾‍♀️', '🙎🏽‍♂️', '🕵🏻‍♀️', '🕵🏻‍♂️', '🕵🏼‍♀️', '🕵🏼‍♂️', '🕵🏽‍♀️', '🕵🏽‍♂️', '🕵🏾‍♀️', '🕵🏾‍♂️', '🕵🏿‍♀️', '🕵🏿‍♂️', '🙅🏻‍♀️', '🙅🏻‍♂️', '🙅🏼‍♀️', '🙅🏼‍♂️', '🙅🏽‍♀️', '🙅🏽‍♂️', '🙅🏾‍♀️', '🙅🏾‍♂️', '🙅🏿‍♀️', '🙅🏿‍♂️', '🙎🏽‍♀️', '🙎🏼‍♂️', '🙆🏻‍♀️', '🙆🏻‍♂️', '🙆🏼‍♀️', '🙆🏼‍♂️', '🙆🏽‍♀️', '🙆🏽‍♂️', '🙆🏾‍♀️', '🙆🏾‍♂️', '🙆🏿‍♀️', '🙆🏿‍♂️', '🙎🏼‍♀️', '🙎🏻‍♂️', '🙇🏻‍♀️', '🙇🏻‍♂️', '🙇🏼‍♀️', '🙇🏼‍♂️', '🙇🏽‍♀️', '🙇🏽‍♂️', '🙇🏾‍♀️', '🙇🏾‍♂️', '🙇🏿‍♀️', '🙇🏿‍♂️', '🙎🏻‍♀️', '🙍🏿‍♂️', '🙋🏻‍♀️', '🙋🏻‍♂️', '🙋🏼‍♀️', '🙋🏼‍♂️', '🙋🏽‍♀️', '🙋🏽‍♂️', '🙋🏾‍♀️', '🙋🏾‍♂️', '🙋🏿‍♀️', '🙋🏿‍♂️', '🙍🏿‍♀️', '🙍🏾‍♂️', '🙍🏻‍♀️', '🙍🏻‍♂️', '🙍🏼‍♀️', '🙍🏼‍♂️', '🙍🏽‍♀️', '🙍🏽‍♂️', '🙍🏾‍♀️', '🏋️‍♂️', '⛹🏾‍♀️', '🏌️‍♀️', '🕵️‍♀️', '🕵️‍♂️', '🏌️‍♂️', '⛹🏻‍♂️', '⛹🏻‍♀️', '⛹🏾‍♂️', '⛹🏿‍♀️', '⛹🏿‍♂️', '⛹🏽‍♀️', '⛹🏽‍♂️', '⛹🏼‍♀️', '🏋️‍♀️', '⛹🏼‍♂️', '⛹️‍♂️', '⛹️‍♀️', '👨🏼‍🌾', '👩🏿‍🚒', '👩🏿‍🚀', '👩🏿‍🔬', '👩🏿‍🔧', '👩🏿‍💼', '👩🏿‍💻', '👩🏿‍🏭', '👩🏿‍🏫', '👩🏿‍🎨', '👩🏿‍🎤', '👩🏿‍🎓', '👩🏿‍🍳', '👩🏿‍🌾', '👩🏾‍🚒', '👩🏾‍🚀', '👩🏾‍🔬', '👩🏾‍🔧', '👩🏾‍💼', '👩🏾‍💻', '👩🏾‍🏭', '👩🏾‍🏫', '👩🏾‍🎨', '👩🏾‍🎤', '👩🏾‍🎓', '👩🏾‍🍳', '👩🏾‍🌾', '👩🏽‍🚒', '👩🏽‍🚀', '👩🏽‍🔬', '👩🏽‍🔧', '👩🏽‍💼', '👩🏽‍💻', '👩🏽‍🏭', '👩🏽‍🏫', '👩🏽‍🎨', '👩🏽‍🎤', '👩🏽‍🎓', '👩🏽‍🍳', '👩🏽‍🌾', '👩🏼‍🚒', '👩🏼‍🚀', '👩🏼‍🔬', '👩🏼‍🔧', '👩🏼‍💼', '👩🏼‍💻', '👩🏼‍🏭', '👩🏼‍🏫', '👩🏼‍🎨', '👩🏼‍🎤', '👩🏼‍🎓', '👩🏼‍🍳', '👩🏼‍🌾', '👩🏻‍🚒', '👩🏻‍🚀', '👩🏻‍🔬', '👩🏻‍🔧', '👩🏻‍💼', '👩🏻‍💻', '👩🏻‍🏭', '👩🏻‍🏫', '👩🏻‍🎨', '👩🏻‍🎤', '👩🏻‍🎓', '👨🏻‍🚒', '👩🏻‍🌾', '👨🏻‍🌾', '👨🏻‍🍳', '👨🏻‍🎓', '👨🏻‍🎤', '👨🏻‍🎨', '👨🏻‍🏫', '👨🏻‍🏭', '👨🏻‍💻', '👨🏻‍💼', '👨🏻‍🔧', '👨🏻‍🔬', '👨🏻‍🚀', '👨🏿‍🚒', '👨🏿‍🚀', '👨🏿‍🔬', '👨🏿‍🔧', '👨🏿‍💼', '👨🏿‍💻', '👨🏿‍🏭', '👨🏿‍🏫', '👨🏿‍🎨', '👨🏿‍🎤', '👨🏿‍🎓', '👨🏿‍🍳', '👨🏿‍🌾', '👨🏾‍🚒', '👨🏾‍🚀', '👨🏾‍🔬', '👨🏾‍🔧', '👨🏾‍💼', '👨🏾‍💻', '👨🏾‍🏭', '👨🏾‍🏫', '👨🏾‍🎨', '👨🏾‍🎤', '👨🏾‍🎓', '👨🏾‍🍳', '👨🏾‍🌾', '👨🏽‍🚒', '👨🏽‍🚀', '👨🏽‍🔬', '👨🏽‍🔧', '👨🏽‍💼', '👨🏽‍💻', '👨🏽‍🏭', '👨🏽‍🏫', '👨🏽‍🎨', '👨🏽‍🎤', '👨🏽‍🎓', '👨🏽‍🍳', '👨🏽‍🌾', '👨🏼‍🚒', '👨🏼‍🚀', '👨🏼‍🔬', '👨🏼‍🔧', '👨🏼‍💼', '👨🏼‍💻', '👨🏼‍🏭', '👨🏼‍🏫', '👨🏼‍🎨', '👨🏼‍🎤', '👨🏼‍🎓', '👨🏼‍🍳', '👩🏻‍🍳', '🏳️‍🌈', '👨‍⚖️', '👨‍⚕️', '🧝‍♀️', '🤾‍♀️', '🤾‍♂️', '💂‍♀️', '💁‍♂️', '💁‍♀️', '👷‍♂️', '👷‍♀️', '👳‍♂️', '🤦‍♀️', '🤦‍♂️', '👳‍♀️', '🧜‍♂️', '🧖‍♀️', '🧖‍♂️', '🧜‍♀️', '👱‍♂️', '👱‍♀️', '👯‍♂️', '🚣‍♀️', '🚣‍♂️', '👯‍♀️', '👮‍♂️', '👮‍♀️', '👩‍✈️', '🧗‍♀️', '🧗‍♂️', '🤷‍♀️', '🤷‍♂️', '👩‍⚖️', '👩‍⚕️', '🏃‍♀️', '🏃‍♂️', '🏄‍♀️', '🏄‍♂️', '🚴‍♀️', '🚴‍♂️', '🧘‍♀️', '🧘‍♂️', '🏊‍♀️', '🏊‍♂️', '🤸‍♀️', '🤸‍♂️', '🙋‍♂️', '🙇‍♂️', '🙍‍♀️', '🏴‍☠️', '🧟‍♂️', '🧟‍♀️', '🧙‍♀️', '🧙‍♂️', '🧞‍♂️', '🧞‍♀️', '🚵‍♀️', '🚵‍♂️', '🤹‍♀️', '🤹‍♂️', '🤼‍♀️', '🤼‍♂️', '🧝‍♂️', '🙍‍♂️', '🧚‍♀️', '🧚‍♂️', '🙇‍♀️', '🙆‍♂️', '🙆‍♀️', '🙅‍♂️', '🙅‍♀️', '💇‍♂️', '💇‍♀️', '💆‍♂️', '🙋‍♀️', '🤽‍♂️', '🧛‍♀️', '🧛‍♂️', '🚶‍♀️', '🚶‍♂️', '💆‍♀️', '💂‍♂️', '🙎‍♀️', '🙎‍♂️', '👨‍✈️', '🤽‍♀️', '👨‍🌾', '👨‍🎓', '👨‍🎤', '👨‍🎨', '👨‍🏫', '👨‍🏭', '👨‍👦', '👨‍👧', '👨‍💻', '👨‍💼', '👨‍🔧', '👨‍🔬', '👨‍🚀', '👁‍🗨', '👨‍🚒', '👨‍🍳', '👩‍🍳', '👩‍🎓', '👩‍🎤', '👩‍🎨', '👩‍🏫', '👩‍🏭', '👩‍👦', '👩‍👧', '👩‍💻', '👩‍💼', '👩‍🔧', '👩‍🔬', '👩‍🚀', '👩‍🚒', '👩‍🌾', '🇧🇲', '🇧🇳', '👱🏾', '🏊🏼', '🇧🇴', '👱🏿', '🇧🇶', '🏊🏽', '👲🏻', '👲🏼', '👲🏽', '👲🏾', '👲🏿', '🇧🇷', '🇧🇸', '👳🏻', '🏊🏾', '🇧🇹', '👳🏼', '🇧🇻', '🏊🏿', '👳🏽', '🇧🇼', '🇧🇾', '👳🏾', '🇧🇿', '🇨🇦', '👳🏿', '🏋🏻', '🇨🇨', '👴🏻', '👴🏼', '👴🏽', '👴🏾', '👴🏿', '👵🏻', '👵🏼', '👵🏽', '👵🏾', '👵🏿', '👶🏻', '👶🏼', '👶🏽', '👶🏾', '👶🏿', '🇨🇩', '🏋🏼', '👷🏻', '🇨🇫', '🇨🇬', '👷🏼', '🏋🏽', '🇨🇭', '👷🏽', '🇨🇮', '🏋🏾', '👷🏾', '🇨🇰', '🇨🇱', '👷🏿', '🏋🏿', '🇨🇲', '👸🏻', '👸🏼', '👸🏽', '👸🏾', '👸🏿', '👼🏻', '👼🏼', '👼🏽', '👼🏾', '👼🏿', '🇨🇳', '🇨🇴', '💁🏻', '🇨🇵', '🏌🏻', '💁🏼', '🇨🇷', '🇨🇺', '💁🏽', '🏌🏼', '🇨🇻', '💁🏾', '🇨🇼', '🏌🏽', '💁🏿', '🇨🇽', '🇨🇾', '🏌🏾', '🇨🇿', '💂🏻', '🇩🇪', '🏌🏿', '💂🏼', '🇩🇬', '🇩🇯', '💂🏽', '🇩🇰', '🇩🇲', '💂🏾', '🇩🇴', '🇩🇿', '💂🏿', '🇪🇦', '🇪🇨', '💃🏻', '💃🏼', '💃🏽', '💃🏾', '💃🏿', '💅🏻', '💅🏼', '💅🏽', '💅🏾', '💅🏿', '👂🏻', '👂🏼', '💆🏻', '👂🏽', '👂🏾', '💆🏼', '👂🏿', '👃🏻', '💆🏽', '👃🏼', '👃🏽', '💆🏾', '👃🏾', '👃🏿', '💆🏿', '👆🏻', '👆🏼', '👆🏽', '👆🏾', '💇🏻', '👆🏿', '👇🏻', '💇🏼', '👇🏼', '👇🏽', '💇🏽', '👇🏾', '👇🏿', '💇🏾', '👈🏻', '👈🏼', '💇🏿', '👈🏽', '👈🏾', '💪🏻', '💪🏼', '💪🏽', '💪🏾', '💪🏿', '🕴🏻', '🕴🏼', '🕴🏽', '🕴🏾', '🕴🏿', '👈🏿', '👉🏻', '🕵🏻', '👉🏼', '👉🏽', '🕵🏼', '👉🏾', '👉🏿', '🕵🏽', '👊🏻', '👊🏼', '🕵🏾', '👊🏽', '👊🏾', '🕵🏿', '👊🏿', '👋🏻', '🕺🏻', '🕺🏼', '🕺🏽', '🕺🏾', '🕺🏿', '🖐🏻', '🖐🏼', '🖐🏽', '🖐🏾', '🖐🏿', '🖕🏻', '🖕🏼', '🖕🏽', '🖕🏾', '🖕🏿', '🖖🏻', '🖖🏼', '🖖🏽', '🖖🏾', '🖖🏿', '👋🏼', '👋🏽', '🙅🏻', '👋🏾', '👋🏿', '🙅🏼', '👌🏻', '👌🏼', '🙅🏽', '🇦🇨', '👌🏾', '🙅🏾', '👌🏿', '👍🏻', '🙅🏿', '👍🏼', '👍🏽', '👍🏾', '👍🏿', '🙆🏻', '👎🏻', '👎🏼', '🙆🏼', '👎🏽', '👎🏾', '🙆🏽', '👎🏿', '👏🏻', '🙆🏾', '👏🏼', '👏🏽', '🙆🏿', '👏🏾', '👏🏿', '👐🏻', '👐🏼', '🙇🏻', '👐🏽', '👐🏾', '🙇🏼', '👐🏿', '👦🏻', '🙇🏽', '👦🏼', '👦🏽', '🙇🏾', '👦🏾', '👦🏿', '🙇🏿', '👧🏻', '👧🏼', '👧🏽', '👧🏾', '🙋🏻', '👧🏿', '🇪🇪', '🙋🏼', '🇪🇬', '🇪🇭', '🙋🏽', '🇪🇷', '🇪🇸', '🙋🏾', '🇪🇹', '🇪🇺', '🙋🏿', '🇫🇮', '🇫🇯', '🙌🏻', '🙌🏼', '🙌🏽', '🙌🏾', '🙌🏿', '🇫🇰', '🇫🇲', '🙍🏻', '🇫🇴', '🇫🇷', '🙍🏼', '🇬🇦', '🇬🇧', '🙍🏽', '🇬🇩', '👨🏻', '🙍🏾', '🇬🇪', '🇬🇫', '🙍🏿', '🇬🇬', '🇬🇭', '🇬🇮', '🇬🇱', '🙎🏻', '🇬🇲', '🇬🇳', '🙎🏼', '🇬🇵', '🇬🇶', '🙎🏽', '🇬🇷', '🇬🇸', '🙎🏾', '🇬🇹', '🇬🇺', '🙎🏿', '🇬🇼', '🇬🇾', '🙏🏻', '🙏🏼', '🙏🏽', '🙏🏾', '🙏🏿', '👨🏼', '🇭🇰', '🚣🏻', '🇭🇲', '🇭🇳', '🚣🏼', '🇭🇷', '🇭🇹', '🚣🏽', '🇭🇺', '🇮🇨', '🚣🏾', '🇮🇩', '🇮🇪', '🚣🏿', '🇮🇱', '🇮🇲', '🇮🇳', '🇮🇴', '🚴🏻', '🇮🇶', '🇮🇷', '🚴🏼', '🇮🇸', '👨🏽', '🚴🏽', '🇮🇹', '🇯🇪', '🚴🏾', '🇯🇲', '🇯🇴', '🚴🏿', '🇯🇵', '🇰🇪', '🇰🇬', '🇰🇭', '🚵🏻', '🇰🇮', '🇰🇲', '🚵🏼', '🇰🇳', '🇰🇵', '🚵🏽', '🇰🇷', '🇰🇼', '🚵🏾', '🇰🇾', '🇰🇿', '🚵🏿', '👨🏾', '🇱🇦', '🇱🇧', '🇱🇨', '🚶🏻', '🇱🇮', '🇱🇰', '🚶🏼', '🇱🇷', '🇱🇸', '🚶🏽', '🇱🇹', '🇱🇺', '🚶🏾', '🇱🇻', '🇱🇾', '🚶🏿', '🇲🇦', '🇲🇨', '🛀🏻', '🛀🏼', '🛀🏽', '🛀🏾', '🛀🏿', '🛌🏻', '🛌🏼', '🛌🏽', '🛌🏾', '🛌🏿', '🤘🏻', '🤘🏼', '🤘🏽', '🤘🏾', '🤘🏿', '🤙🏻', '🤙🏼', '🤙🏽', '🤙🏾', '🤙🏿', '🤚🏻', '🤚🏼', '🤚🏽', '🤚🏾', '🤚🏿', '🤛🏻', '🤛🏼', '🤛🏽', '🤛🏾', '🤛🏿', '🤜🏻', '🤜🏼', '🤜🏽', '🤜🏾', '🤜🏿', '🤞🏻', '🤞🏼', '🤞🏽', '🤞🏾', '🤞🏿', '🤟🏻', '🤟🏼', '🤟🏽', '🤟🏾', '🤟🏿', '🇲🇩', '🇲🇪', '🤦🏻', '🇲🇫', '👨🏿', '🤦🏼', '🇲🇬', '🇲🇭', '🤦🏽', '🇲🇰', '🇲🇱', '🤦🏾', '🇲🇲', '🇲🇳', '🤦🏿', '🇲🇴', '🇲🇵', '🤰🏻', '🤰🏼', '🤰🏽', '🤰🏾', '🤰🏿', '🤱🏻', '🤱🏼', '🤱🏽', '🤱🏾', '🤱🏿', '🤲🏻', '🤲🏼', '🤲🏽', '🤲🏾', '🤲🏿', '🤳🏻', '🤳🏼', '🤳🏽', '🤳🏾', '🤳🏿', '🤴🏻', '🤴🏼', '🤴🏽', '🤴🏾', '🤴🏿', '🤵🏻', '🤵🏼', '🤵🏽', '🤵🏾', '🤵🏿', '🤶🏻', '🤶🏼', '🤶🏽', '🤶🏾', '🤶🏿', '🇲🇶', '🇲🇷', '🤷🏻', '🇲🇸', '🇲🇹', '🤷🏼', '🇲🇺', '🇲🇻', '🤷🏽', '🇲🇼', '🇲🇽', '🤷🏾', '🇲🇾', '🇲🇿', '🤷🏿', '🇳🇦', '🇳🇨', '🇳🇪', '🇳🇫', '🤸🏻', '🇳🇬', '🇳🇮', '🤸🏼', '🇳🇱', '🇳🇴', '🤸🏽', '🇳🇵', '🇳🇷', '🤸🏾', '🇳🇺', '🇳🇿', '🤸🏿', '🇴🇲', '🇵🇦', '🇵🇪', '🇵🇫', '🤹🏻', '🇵🇬', '🇵🇭', '🤹🏼', '🇵🇰', '🇵🇱', '🤹🏽', '🇵🇲', '🇵🇳', '🤹🏾', '🇵🇷', '🇵🇸', '🤹🏿', '🇵🇹', '🇵🇼', '🇵🇾', '🇶🇦', '🇷🇪', '🇷🇴', '🤽🏻', '🇷🇸', '👩🏻', '🤽🏼', '🇷🇺', '🇷🇼', '🤽🏽', '🇸🇦', '🇸🇧', '🤽🏾', '🇸🇨', '🇸🇩', '🤽🏿', '🇸🇪', '🇸🇬', '🇦🇩', '🇸🇮', '🤾🏻', '🇸🇯', '🇸🇰', '🤾🏼', '🇸🇱', '🇸🇲', '🤾🏽', '🇸🇳', '🇸🇴', '🤾🏾', '👩🏼', '🇸🇷', '🤾🏿', '🇸🇸', '🇸🇹', '🧑🏻', '🧑🏼', '🧑🏽', '🧑🏾', '🧑🏿', '🧒🏻', '🧒🏼', '🧒🏽', '🧒🏾', '🧒🏿', '🧓🏻', '🧓🏼', '🧓🏽', '🧓🏾', '🧓🏿', '🧔🏻', '🧔🏼', '🧔🏽', '🧔🏾', '🧔🏿', '🧕🏻', '🧕🏼', '🧕🏽', '🧕🏾', '🧕🏿', '🇸🇻', '🇸🇽', '🧖🏻', '🇸🇾', '🇸🇿', '🧖🏼', '🇹🇦', '🇹🇨', '🧖🏽', '🇹🇩', '🇹🇫', '🧖🏾', '🇹🇬', '🇹🇭', '🧖🏿', '🇹🇯', '🇹🇰', '🇹🇱', '👩🏽', '🧗🏻', '🇹🇲', '🇹🇳', '🧗🏼', '🇹🇴', '🇹🇷', '🧗🏽', '🇹🇹', '🇹🇻', '🧗🏾', '🇹🇼', '🇹🇿', '🧗🏿', '🇺🇦', '🇺🇬', '🇺🇲', '🇺🇳', '🧘🏻', '🇺🇸', '🇺🇾', '🧘🏼', '🇺🇿', '🇻🇦', '🧘🏽', '👩🏾', '🇻🇨', '🧘🏾', '🇻🇪', '🇻🇬', '🧘🏿', '🇻🇮', '🇻🇳', '🇻🇺', '🇼🇫', '🧙🏻', '🇼🇸', '🇽🇰', '🧙🏼', '🇾🇪', '🇾🇹', '🧙🏽', '🇿🇦', '🇿🇲', '🧙🏾', '🇿🇼', '🎅🏻', '🧙🏿', '🎅🏼', '👩🏿', '🎅🏽', '🎅🏾', '🧚🏻', '🎅🏿', '🏂🏻', '🧚🏼', '🏂🏼', '🏂🏽', '🧚🏽', '🏂🏾', '🏂🏿', '🧚🏾', '👌🏽', '🇦🇪', '🧚🏿', '🏃🏻', '🇦🇫', '🇦🇬', '🏃🏼', '🧛🏻', '🇦🇮', '🇦🇱', '🧛🏼', '🏃🏽', '🇦🇲', '🧛🏽', '🇦🇴', '🏃🏾', '🧛🏾', '🇦🇶', '🇦🇷', '🧛🏿', '🏃🏿', '🇦🇸', '🇦🇹', '🇦🇺', '🧜🏻', '🇦🇼', '🏄🏻', '🧜🏼', '🇦🇽', '🇦🇿', '🧜🏽', '🏄🏼', '🇧🇦', '🧜🏾', '👮🏻', '🇧🇧', '🧜🏿', '🏄🏽', '👮🏼', '🇧🇩', '🇧🇪', '🧝🏻', '👮🏽', '🏄🏾', '🧝🏼', '🇧🇫', '👮🏾', '🧝🏽', '🇧🇬', '🏄🏿', '🧝🏾', '👮🏿', '🇧🇭', '🧝🏿', '🇧🇮', '🏇🏻', '🏇🏼', '👰🏻', '👰🏼', '👰🏽', '👰🏾', '👰🏿', '🏇🏽', '🏇🏾', '👱🏻', '🏇🏿', '🇧🇯', '👱🏼', '🇧🇱', '🏊🏻', '👱🏽', '🇸🇭', '✍🏿', '⛹🏻', '✍🏾', '✍🏽', '✍🏼', '✍🏻', '✌🏿', '✌🏾', '✌🏽', '✌🏼', '✌🏻', '✋🏿', '✋🏾', '✋🏽', '✋🏼', '✋🏻', '✊🏿', '✊🏾', '✊🏽', '✊🏼', '✊🏻', '⛷🏽', '⛷🏾', '⛹🏿', '☝🏿', '☝🏾', '⛹🏾', '☝🏽', '☝🏼', '⛹🏽', '☝🏻', '⛷🏿', '⛹🏼', '⛷🏻', '⛷🏼', '4⃣', '#⃣', '0⃣', '1⃣', '2⃣', '3⃣', '*⃣', '5⃣', '6⃣', '7⃣', '8⃣', '9⃣', '🇳', '🕔', '🕕', '🕖', '🕗', '🕘', '🕙', '🕚', '🕛', '🕜', '🕝', '🕞', '🕟', '🕠', '🕡', '🕢', '🕣', '🕤', '🕥', '🕦', '🕧', '🕯', '🕰', '🕳', '🎇', '🎈', '🎉', '🎊', '🎋', '🕴', '🎌', '🎍', '🎎', '🎏', '🎐', '🎑', '🎒', '🎓', '🎖', '🎗', '🎙', '🎚', '🎛', '🎞', '🎟', '🎠', '🎡', '🕵', '🕶', '🕷', '🕸', '🕹', '🎢', '🎣', '🎤', '🎥', '🎦', '🕺', '🖇', '🖊', '🖋', '🖌', '🖍', '🎧', '🎨', '🎩', '🎪', '🎫', '🖐', '🎬', '🎭', '🎮', '🎯', '🎰', '🖕', '🎱', '🎲', '🎳', '🎴', '🎵', '🖖', '🖤', '🖥', '🖨', '🖱', '🖲', '🖼', '🗂', '🗃', '🗄', '🗑', '🗒', '🗓', '🗜', '🗝', '🗞', '🗡', '🗣', '🗨', '🗯', '🗳', '🗺', '🗻', '🗼', '🗽', '🗾', '🗿', '😀', '😁', '😂', '😃', '😄', '😅', '😆', '😇', '😈', '😉', '😊', '😋', '😌', '😍', '😎', '😏', '😐', '😑', '😒', '😓', '😔', '😕', '😖', '😗', '😘', '😙', '😚', '😛', '😜', '😝', '😞', '😟', '😠', '😡', '😢', '😣', '😤', '😥', '😦', '😧', '😨', '😩', '😪', '😫', '😬', '😭', '😮', '😯', '😰', '😱', '😲', '😳', '😴', '😵', '😶', '😷', '😸', '😹', '😺', '😻', '😼', '😽', '😾', '😿', '🙀', '🙁', '🙂', '🙃', '🙄', '🎶', '🎷', '🎸', '🎹', '🎺', '🎻', '🎼', '🎽', '🎾', '🎿', '🏀', '🏁', '🇧', '🇮', '🇪', '🇷', '🇱', '🙅', '🏂', '🆎', '🆑', '🇨', '🇹', '🇯', '🆒', '🇬', '🆓', '🃏', '🆔', '🇴', '🇺', '🇫', '🆕', '🆖', '🆗', '🙆', '🇭', '🏃', '🆘', '🇩', '🇻', '🇰', '🆙', '🇼', '🆚', '🇽', '🇸', '🀄', '🇾', '🇦', '🅰', '🅱', '🇿', '🙇', '🙈', '🙉', '🙊', '🈁', '🈂', '🏄', '🏅', '🏆', '🈚', '🈯', '🈲', '🈳', '🈴', '🏇', '👨', '🏈', '🏉', '🈵', '🈶', '🈷', '🙋', '🈸', '🈹', '🈺', '🉐', '🉑', '🙌', '🌀', '🌁', '🌂', '🌃', '🌄', '🌅', '🌆', '🌇', '🌈', '🏊', '🌉', '🌊', '🌋', '🌌', '🌍', '🌎', '🌏', '🙍', '🌐', '🌑', '🌒', '🌓', '🌔', '🌕', '🌖', '🌗', '🌘', '🌙', '🏋', '🌚', '🌛', '🌜', '🌝', '🌞', '🌟', '🙎', '🌠', '🌡', '🌤', '🌥', '🌦', '🙏', '🚀', '🚁', '🚂', '🚃', '🚄', '🚅', '🚆', '🚇', '🚈', '🚉', '🚊', '🚋', '🚌', '🚍', '🚎', '🚏', '🚐', '🚑', '🚒', '🚓', '🚔', '🚕', '🚖', '🚗', '🚘', '🚙', '🚚', '🚛', '🚜', '🚝', '🚞', '🚟', '🚠', '🚡', '🚢', '🌧', '🌨', '🌩', '🌪', '🌫', '🌬', '🏌', '🏍', '🏎', '🏏', '🏐', '🏑', '🏒', '🏓', '🏔', '🏕', '🏖', '🚣', '🚤', '🚥', '🚦', '🚧', '🚨', '🚩', '🚪', '🚫', '🚬', '🚭', '🚮', '🚯', '🚰', '🚱', '🚲', '🚳', '🏗', '🏘', '🏙', '🏚', '🏛', '🏜', '🏝', '🏞', '🏟', '🏠', '🏡', '🏢', '🏣', '🏤', '🏥', '🏦', '🏧', '🚴', '🏨', '🏩', '🏪', '🏫', '🏬', '🏭', '🏮', '🏯', '🏰', '🌭', '🏳', '🌮', '🌯', '🌰', '🌱', '🏴', '🏵', '🚵', '🏷', '🏸', '🏹', '🏺', '🏻', '🏼', '🏽', '🏾', '🏿', '🐀', '🐁', '🐂', '🐃', '🐄', '🐅', '👩', '👪', '🚶', '🚷', '🚸', '🚹', '🚺', '🚻', '🚼', '🚽', '🚾', '🚿', '👫', '👬', '👭', '🐆', '🐇', '🛀', '🛁', '🛂', '🛃', '🛄', '🛅', '🛋', '🐈', '🐉', '🐊', '🐋', '🐌', '🛌', '🛍', '🛎', '🛏', '🛐', '🛑', '🛒', '🛠', '🛡', '🛢', '🛣', '🛤', '🛥', '🛩', '🛫', '🛬', '🛰', '🛳', '🛴', '🛵', '🛶', '🛷', '🛸', '🤐', '🤑', '🤒', '🤓', '🤔', '🤕', '🤖', '🤗', '🐍', '🐎', '🐏', '🐐', '🐑', '🤘', '🐒', '🐓', '🐔', '🐕', '🐖', '🤙', '👮', '🐗', '🐘', '👯', '🐙', '🤚', '🐚', '🐛', '🐜', '🐝', '👰', '🤛', '🐞', '🐟', '🐠', '🐡', '🐢', '🤜', '🤝', '🐣', '🐤', '🐥', '🐦', '🐧', '🤞', '🐨', '🐩', '🐪', '🐫', '🐬', '🤟', '🤠', '🤡', '🤢', '🤣', '🤤', '🤥', '🐭', '🐮', '👱', '🐯', '🐰', '🐱', '🐲', '🐳', '👲', '🐴', '🐵', '🐶', '🐷', '🐸', '🐹', '🐺', '🐻', '🤦', '🤧', '🤨', '🤩', '🤪', '🤫', '🤬', '🤭', '🤮', '🤯', '🐼', '🐽', '🐾', '🐿', '👀', '🤰', '🌲', '👁', '🌳', '🌴', '👳', '🤱', '🌵', '🌶', '🌷', '👂', '🌸', '🤲', '👴', '🌹', '🌺', '🌻', '🌼', '🤳', '👃', '👵', '👄', '👅', '🌽', '🤴', '🌾', '🌿', '👶', '🍀', '🍁', '🤵', '👆', '🍂', '🍃', '🍄', '🍅', '🤶', '🍆', '👇', '🍇', '🍈', '🍉', '🍊', '🍋', '👈', '🍌', '🍍', '👷', '🍎', '🍏', '🍐', '👉', '🍑', '👸', '🤷', '👹', '👺', '👻', '🍒', '🍓', '🍔', '🍕', '👊', '👼', '👽', '👾', '👿', '💀', '🍖', '🍗', '🍘', '🍙', '🤸', '🍚', '👋', '🍛', '🍜', '🍝', '🍞', '🍟', '👌', '🍠', '🍡', '🍢', '🍣', '🍤', '💁', '👍', '🍥', '🍦', '🤹', '🤺', '🍧', '🍨', '🤼', '🍩', '👎', '🍪', '🍫', '🍬', '🍭', '🍮', '👏', '🍯', '🍰', '🍱', '🍲', '💂', '🍳', '👐', '👑', '👒', '🤽', '👓', '💃', '💄', '👔', '👕', '👖', '👗', '👘', '💅', '👙', '👚', '👛', '👜', '👝', '👞', '👟', '👠', '🤾', '🥀', '🥁', '🥂', '🥃', '🥄', '🥅', '🥇', '🥈', '🥉', '🥊', '🥋', '🥌', '🥐', '🥑', '🥒', '🥓', '🥔', '🥕', '🥖', '🥗', '🥘', '🥙', '🥚', '🥛', '🥜', '🥝', '🥞', '🥟', '🥠', '🥡', '🥢', '🥣', '🥤', '🥥', '🥦', '🥧', '🥨', '🥩', '🥪', '🥫', '🦀', '🦁', '🦂', '🦃', '🦄', '🦅', '🦆', '🦇', '🦈', '🦉', '🦊', '🦋', '🦌', '🦍', '🦎', '🦏', '🦐', '🦑', '🦒', '🦓', '🦔', '🦕', '🦖', '🦗', '🧀', '🧐', '👡', '👢', '👣', '👤', '👥', '🧑', '🍴', '🍵', '🍶', '🍷', '💆', '🧒', '🍸', '👦', '🍹', '🍺', '🍻', '🧓', '🍼', '🍽', '👧', '🍾', '🍿', '🧔', '🎀', '🎁', '🎂', '🎃', '🎄', '🧕', '🇵', '🅾', '💇', '💈', '💉', '💊', '💋', '💌', '💍', '💎', '💏', '💐', '💑', '💒', '💓', '💔', '💕', '🧖', '💖', '💗', '💘', '💙', '💚', '💛', '💜', '💝', '💞', '💟', '💠', '💡', '💢', '💣', '💤', '💥', '💦', '🧗', '💧', '💨', '💩', '🇶', '🇲', '🅿', '🎅', '🎆', '💪', '💫', '💬', '💭', '💮', '💯', '💰', '💱', '💲', '🧘', '💳', '💴', '💵', '💶', '💷', '💸', '💹', '💺', '💻', '💼', '💽', '💾', '💿', '📀', '📁', '📂', '📃', '🧙', '📄', '📅', '📆', '📇', '📈', '📉', '📊', '📋', '📌', '📍', '📎', '📏', '📐', '📑', '📒', '📓', '📔', '🧚', '📕', '📖', '📗', '📘', '📙', '📚', '📛', '📜', '📝', '📞', '📟', '📠', '📡', '📢', '📣', '📤', '📥', '🧛', '📦', '📧', '📨', '📩', '📪', '📫', '📬', '📭', '📮', '📯', '📰', '📱', '📲', '📳', '📴', '📵', '📶', '🧜', '📷', '📸', '📹', '📺', '📻', '📼', '📽', '📿', '🔀', '🔁', '🔂', '🔃', '🔄', '🔅', '🔆', '🔇', '🔈', '🧝', '🔉', '🔊', '🧞', '🔋', '🔌', '🧟', '🧠', '🧡', '🧢', '🧣', '🧤', '🧥', '🧦', '🔍', '🔎', '🔏', '🔐', '🔑', '🔒', '🔓', '🔔', '🔕', '🔖', '🔗', '🔘', '🔙', '🔚', '🔛', '🔜', '🔝', '🔞', '🔟', '🔠', '🔡', '🔢', '🔣', '🔤', '🔥', '🔦', '🔧', '🔨', '🔩', '🔪', '🔫', '🔬', '🔭', '🔮', '🔯', '🔰', '🔱', '🔲', '🔳', '🔴', '🔵', '🔶', '🔷', '🔸', '🔹', '🔺', '🔻', '🔼', '🔽', '🕉', '🕊', '🕋', '🕌', '🕍', '🕎', '🕐', '🕑', '🕒', '🕓', '▪', '☦', '☮', '☯', '☸', '☹', '☺', '♀', '♂', '♈', '♉', '♊', '♋', '♌', '♍', '♎', '♏', '♐', '♑', '♒', '♓', '♠', '♣', '♥', '♦', '♨', '♻', '♿', '⚒', '⚓', '⚔', '⚕', '⚖', '⚗', '⚙', '⚛', '⚜', '⚠', '⚡', '⚪', '⚫', '⚰', '⚱', '⚽', '⚾', '⛄', '⛅', '⛈', '⛎', '⛏', '⛑', '⛓', '⛔', '⛩', '⛪', '⛰', '⛱', '⛲', '⛳', '⛴', '⛵', '☣', '☢', '☠', '☝', '☘', '⛷', '⛸', '☕', '☔', '☑', '☎', '☄', '☃', '☂', '☁', '☀', '◾', '◽', '◼', '◻', '◀', '▶', '▫', '☪', '⛹', '⛺', '⛽', '✂', '✅', '✈', '✉', 'Ⓜ', '⏺', '⏹', '⏸', '⏳', '✊', '⏲', '⏱', '⏰', '⏯', '⏮', '✋', '⏭', '⏬', '⏫', '⏪', '⏩', '✌', '⏏', '⌨', '⌛', '⌚', '↪', '✍', '✏', '✒', '✔', '✖', '✝', '✡', '✨', '✳', '✴', '❄', '❇', '❌', '❎', '❓', '❔', '❕', '❗', '❣', '❤', '➕', '➖', '➗', '➡', '➰', '➿', '⤴', '⤵', '↩', '⬅', '⬆', '⬇', '⬛', '⬜', '⭐', '⭕', '↙', '〰', '〽', '↘', '↗', '㊗', '㊙', '↖', '↕', '↔', 'ℹ', '™', '⁉', '‼', '' ); 5607 $partials = array( '🀄', '🃏', '🅰', '🅱', '🅾', '🅿', '🆎', '🆑', '🆒', '🆓', '🆔', '🆕', '🆖', '🆗', '🆘', '🆙', '🆚', '🇦', '🇨', '🇩', '🇪', '🇫', '🇬', '🇮', '🇱', '🇲', '🇴', '🇶', '🇷', '🇸', '🇹', '🇺', '🇼', '🇽', '🇿', '🇧', '🇭', '🇯', '🇳', '🇻', '🇾', '🇰', '🇵', '🈁', '🈂', '🈚', '🈯', '🈲', '🈳', '🈴', '🈵', '🈶', '🈷', '🈸', '🈹', '🈺', '🉐', '🉑', '🌀', '🌁', '🌂', '🌃', '🌄', '🌅', '🌆', '🌇', '🌈', '🌉', '🌊', '🌋', '🌌', '🌍', '🌎', '🌏', '🌐', '🌑', '🌒', '🌓', '🌔', '🌕', '🌖', '🌗', '🌘', '🌙', '🌚', '🌛', '🌜', '🌝', '🌞', '🌟', '🌠', '🌡', '🌤', '🌥', '🌦', '🌧', '🌨', '🌩', '🌪', '🌫', '🌬', '🌭', '🌮', '🌯', '🌰', '🌱', '🌲', '🌳', '🌴', '🌵', '🌶', '🌷', '🌸', '🌹', '🌺', '🌻', '🌼', '🌽', '🌾', '🌿', '🍀', '🍁', '🍂', '🍃', '🍄', '🍅', '🍆', '🍇', '🍈', '🍉', '🍊', '🍋', '🍌', '🍍', '🍎', '🍏', '🍐', '🍑', '🍒', '🍓', '🍔', '🍕', '🍖', '🍗', '🍘', '🍙', '🍚', '🍛', '🍜', '🍝', '🍞', '🍟', '🍠', '🍡', '🍢', '🍣', '🍤', '🍥', '🍦', '🍧', '🍨', '🍩', '🍪', '🍫', '🍬', '🍭', '🍮', '🍯', '🍰', '🍱', '🍲', '🍳', '🍴', '🍵', '🍶', '🍷', '🍸', '🍹', '🍺', '🍻', '🍼', '🍽', '🍾', '🍿', '🎀', '🎁', '🎂', '🎃', '🎄', '🎅', '🏻', '🏼', '🏽', '🏾', '🏿', '🎆', '🎇', '🎈', '🎉', '🎊', '🎋', '🎌', '🎍', '🎎', '🎏', '🎐', '🎑', '🎒', '🎓', '🎖', '🎗', '🎙', '🎚', '🎛', '🎞', '🎟', '🎠', '🎡', '🎢', '🎣', '🎤', '🎥', '🎦', '🎧', '🎨', '🎩', '🎪', '🎫', '🎬', '🎭', '🎮', '🎯', '🎰', '🎱', '🎲', '🎳', '🎴', '🎵', '🎶', '🎷', '🎸', '🎹', '🎺', '🎻', '🎼', '🎽', '🎾', '🎿', '🏀', '🏁', '🏂', '🏃', '‍', '♀', '️', '♂', '🏄', '🏅', '🏆', '🏇', '🏈', '🏉', '🏊', '🏋', '🏌', '🏍', '🏎', '🏏', '🏐', '🏑', '🏒', '🏓', '🏔', '🏕', '🏖', '🏗', '🏘', '🏙', '🏚', '🏛', '🏜', '🏝', '🏞', '🏟', '🏠', '🏡', '🏢', '🏣', '🏤', '🏥', '🏦', '🏧', '🏨', '🏩', '🏪', '🏫', '🏬', '🏭', '🏮', '🏯', '🏰', '🏳', '🏴', '☠', '󠁧', '󠁢', '󠁥', '󠁮', '󠁿', '󠁳', '󠁣', '󠁴', '󠁷', '󠁬', '🏵', '🏷', '🏸', '🏹', '🏺', '🐀', '🐁', '🐂', '🐃', '🐄', '🐅', '🐆', '🐇', '🐈', '🐉', '🐊', '🐋', '🐌', '🐍', '🐎', '🐏', '🐐', '🐑', '🐒', '🐓', '🐔', '🐕', '🐖', '🐗', '🐘', '🐙', '🐚', '🐛', '🐜', '🐝', '🐞', '🐟', '🐠', '🐡', '🐢', '🐣', '🐤', '🐥', '🐦', '🐧', '🐨', '🐩', '🐪', '🐫', '🐬', '🐭', '🐮', '🐯', '🐰', '🐱', '🐲', '🐳', '🐴', '🐵', '🐶', '🐷', '🐸', '🐹', '🐺', '🐻', '🐼', '🐽', '🐾', '🐿', '👀', '👁', '🗨', '👂', '👃', '👄', '👅', '👆', '👇', '👈', '👉', '👊', '👋', '👌', '👍', '👎', '👏', '👐', '👑', '👒', '👓', '👔', '👕', '👖', '👗', '👘', '👙', '👚', '👛', '👜', '👝', '👞', '👟', '👠', '👡', '👢', '👣', '👤', '👥', '👦', '👧', '👨', '💻', '💼', '🔧', '🔬', '🚀', '🚒', '⚕', '⚖', '✈', '👩', '❤', '💋', '👪', '👫', '👬', '👭', '👮', '👯', '👰', '👱', '👲', '👳', '👴', '👵', '👶', '👷', '👸', '👹', '👺', '👻', '👼', '👽', '👾', '👿', '💀', '💁', '💂', '💃', '💄', '💅', '💆', '💇', '💈', '💉', '💊', '💌', '💍', '💎', '💏', '💐', '💑', '💒', '💓', '💔', '💕', '💖', '💗', '💘', '💙', '💚', '💛', '💜', '💝', '💞', '💟', '💠', '💡', '💢', '💣', '💤', '💥', '💦', '💧', '💨', '💩', '💪', '💫', '💬', '💭', '💮', '💯', '💰', '💱', '💲', '💳', '💴', '💵', '💶', '💷', '💸', '💹', '💺', '💽', '💾', '💿', '📀', '📁', '📂', '📃', '📄', '📅', '📆', '📇', '📈', '📉', '📊', '📋', '📌', '📍', '📎', '📏', '📐', '📑', '📒', '📓', '📔', '📕', '📖', '📗', '📘', '📙', '📚', '📛', '📜', '📝', '📞', '📟', '📠', '📡', '📢', '📣', '📤', '📥', '📦', '📧', '📨', '📩', '📪', '📫', '📬', '📭', '📮', '📯', '📰', '📱', '📲', '📳', '📴', '📵', '📶', '📷', '📸', '📹', '📺', '📻', '📼', '📽', '📿', '🔀', '🔁', '🔂', '🔃', '🔄', '🔅', '🔆', '🔇', '🔈', '🔉', '🔊', '🔋', '🔌', '🔍', '🔎', '🔏', '🔐', '🔑', '🔒', '🔓', '🔔', '🔕', '🔖', '🔗', '🔘', '🔙', '🔚', '🔛', '🔜', '🔝', '🔞', '🔟', '🔠', '🔡', '🔢', '🔣', '🔤', '🔥', '🔦', '🔨', '🔩', '🔪', '🔫', '🔭', '🔮', '🔯', '🔰', '🔱', '🔲', '🔳', '🔴', '🔵', '🔶', '🔷', '🔸', '🔹', '🔺', '🔻', '🔼', '🔽', '🕉', '🕊', '🕋', '🕌', '🕍', '🕎', '🕐', '🕑', '🕒', '🕓', '🕔', '🕕', '🕖', '🕗', '🕘', '🕙', '🕚', '🕛', '🕜', '🕝', '🕞', '🕟', '🕠', '🕡', '🕢', '🕣', '🕤', '🕥', '🕦', '🕧', '🕯', '🕰', '🕳', '🕴', '🕵', '🕶', '🕷', '🕸', '🕹', '🕺', '🖇', '🖊', '🖋', '🖌', '🖍', '🖐', '🖕', '🖖', '🖤', '🖥', '🖨', '🖱', '🖲', '🖼', '🗂', '🗃', '🗄', '🗑', '🗒', '🗓', '🗜', '🗝', '🗞', '🗡', '🗣', '🗯', '🗳', '🗺', '🗻', '🗼', '🗽', '🗾', '🗿', '😀', '😁', '😂', '😃', '😄', '😅', '😆', '😇', '😈', '😉', '😊', '😋', '😌', '😍', '😎', '😏', '😐', '😑', '😒', '😓', '😔', '😕', '😖', '😗', '😘', '😙', '😚', '😛', '😜', '😝', '😞', '😟', '😠', '😡', '😢', '😣', '😤', '😥', '😦', '😧', '😨', '😩', '😪', '😫', '😬', '😭', '😮', '😯', '😰', '😱', '😲', '😳', '😴', '😵', '😶', '😷', '😸', '😹', '😺', '😻', '😼', '😽', '😾', '😿', '🙀', '🙁', '🙂', '🙃', '🙄', '🙅', '🙆', '🙇', '🙈', '🙉', '🙊', '🙋', '🙌', '🙍', '🙎', '🙏', '🚁', '🚂', '🚃', '🚄', '🚅', '🚆', '🚇', '🚈', '🚉', '🚊', '🚋', '🚌', '🚍', '🚎', '🚏', '🚐', '🚑', '🚓', '🚔', '🚕', '🚖', '🚗', '🚘', '🚙', '🚚', '🚛', '🚜', '🚝', '🚞', '🚟', '🚠', '🚡', '🚢', '🚣', '🚤', '🚥', '🚦', '🚧', '🚨', '🚩', '🚪', '🚫', '🚬', '🚭', '🚮', '🚯', '🚰', '🚱', '🚲', '🚳', '🚴', '🚵', '🚶', '🚷', '🚸', '🚹', '🚺', '🚻', '🚼', '🚽', '🚾', '🚿', '🛀', '🛁', '🛂', '🛃', '🛄', '🛅', '🛋', '🛌', '🛍', '🛎', '🛏', '🛐', '🛑', '🛒', '🛠', '🛡', '🛢', '🛣', '🛤', '🛥', '🛩', '🛫', '🛬', '🛰', '🛳', '🛴', '🛵', '🛶', '🛷', '🛸', '🤐', '🤑', '🤒', '🤓', '🤔', '🤕', '🤖', '🤗', '🤘', '🤙', '🤚', '🤛', '🤜', '🤝', '🤞', '🤟', '🤠', '🤡', '🤢', '🤣', '🤤', '🤥', '🤦', '🤧', '🤨', '🤩', '🤪', '🤫', '🤬', '🤭', '🤮', '🤯', '🤰', '🤱', '🤲', '🤳', '🤴', '🤵', '🤶', '🤷', '🤸', '🤹', '🤺', '🤼', '🤽', '🤾', '🥀', '🥁', '🥂', '🥃', '🥄', '🥅', '🥇', '🥈', '🥉', '🥊', '🥋', '🥌', '🥐', '🥑', '🥒', '🥓', '🥔', '🥕', '🥖', '🥗', '🥘', '🥙', '🥚', '🥛', '🥜', '🥝', '🥞', '🥟', '🥠', '🥡', '🥢', '🥣', '🥤', '🥥', '🥦', '🥧', '🥨', '🥩', '🥪', '🥫', '🦀', '🦁', '🦂', '🦃', '🦄', '🦅', '🦆', '🦇', '🦈', '🦉', '🦊', '🦋', '🦌', '🦍', '🦎', '🦏', '🦐', '🦑', '🦒', '🦓', '🦔', '🦕', '🦖', '🦗', '🧀', '🧐', '🧑', '🧒', '🧓', '🧔', '🧕', '🧖', '🧗', '🧘', '🧙', '🧚', '🧛', '🧜', '🧝', '🧞', '🧟', '🧠', '🧡', '🧢', '🧣', '🧤', '🧥', '🧦', '‼', '⁉', '™', 'ℹ', '↔', '↕', '↖', '↗', '↘', '↙', '↩', '↪', '⃣', '⌚', '⌛', '⌨', '⏏', '⏩', '⏪', '⏫', '⏬', '⏭', '⏮', '⏯', '⏰', '⏱', '⏲', '⏳', '⏸', '⏹', '⏺', 'Ⓜ', '▪', '▫', '▶', '◀', '◻', '◼', '◽', '◾', '☀', '☁', '☂', '☃', '☄', '☎', '☑', '☔', '☕', '☘', '☝', '☢', '☣', '☦', '☪', '☮', '☯', '☸', '☹', '☺', '♈', '♉', '♊', '♋', '♌', '♍', '♎', '♏', '♐', '♑', '♒', '♓', '♠', '♣', '♥', '♦', '♨', '♻', '♿', '⚒', '⚓', '⚔', '⚗', '⚙', '⚛', '⚜', '⚠', '⚡', '⚪', '⚫', '⚰', '⚱', '⚽', '⚾', '⛄', '⛅', '⛈', '⛎', '⛏', '⛑', '⛓', '⛔', '⛩', '⛪', '⛰', '⛱', '⛲', '⛳', '⛴', '⛵', '⛷', '⛸', '⛹', '⛺', '⛽', '✂', '✅', '✉', '✊', '✋', '✌', '✍', '✏', '✒', '✔', '✖', '✝', '✡', '✨', '✳', '✴', '❄', '❇', '❌', '❎', '❓', '❔', '❕', '❗', '❣', '➕', '➖', '➗', '➡', '➰', '➿', '⤴', '⤵', '⬅', '⬆', '⬇', '⬛', '⬜', '⭐', '⭕', '〰', '〽', '㊗', '㊙', '' ); 5326 5608 // END: emoji arrays 5327 5609 … … 5344 5626 */ 5345 5627 function url_shorten( $url, $length = 35 ) { 5346 $stripped = str_replace( array( 'https://', 'http://', 'www.' ), '', $url );5628 $stripped = str_replace( array( 'https://', 'http://', 'www.' ), '', $url ); 5347 5629 $short_url = untrailingslashit( $stripped ); 5348 5630 … … 5370 5652 5371 5653 // 3 or 6 hex digits, or the empty string. 5372 if ( preg_match( '|^#([A-Fa-f0-9]{3}){1,2}$|', $color ) ) {5654 if ( preg_match( '|^#([A-Fa-f0-9]{3}){1,2}$|', $color ) ) { 5373 5655 return $color; 5374 5656 }
Note: See TracChangeset
for help on using the changeset viewer.