WordPress.org

Make WordPress Core

Ticket #9692: seem_utf8_test.php

File seem_utf8_test.php, 1.3 KB (added by peaceablewhale, 6 years ago)

PHP script for testing

Line 
1<?php
2function seems_utf8(&$str) {
3        $length = strlen($str);
4        for ($i=0; $i < $length; $i++) {
5                $c = ord($str[$i]); 
6                if ($c < 0x80) $n = 0; # 0bbbbbbb
7                elseif (($c & 0xE0) == 0xC0) $n=1; # 110bbbbb
8                elseif (($c & 0xF0) == 0xE0) $n=2; # 1110bbbb
9                elseif (($c & 0xF8) == 0xF0) $n=3; # 11110bbb
10                elseif (($c & 0xFC) == 0xF8) $n=4; # 111110bb
11                elseif (($c & 0xFE) == 0xFC) $n=5; # 1111110b
12                else return false; # Does not match any model
13                for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ?
14                        if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80))
15                                return false;
16                }
17        }
18        return true;
19}
20function bool_to_string($bool) {
21        if($bool===true) {
22                return "true";
23        }
24        else if($bool===false) {
25                return "false";
26        }
27        else if($bool===null) {
28                return "null";
29        }
30        else {
31                return "non-boolean";
32        }
33}
34header("Content-Type: text/plain; charset=UTF-8");
35header("X-Content-Type-Options: nosniff");
36$string1="\x24 \xC2\xA2 \xE2\x82\xAC \xF4\x8A\xAF\x8D"; /* U+0024 U+00A2 U+20AC U+10ABCD in UTF-8 */
37$string2="\x19\x90 \x2F\x66 \x00\x4E \x8A\x62 \x41\xD8\x79\xDF \x00\x52 \x02\x30"; /* U+9019 U+662F U+4E00 U+628A U+20779 U+5200 U+3002 in UTF-16 */
38echo bool_to_string(seems_utf8($string1))."\r\n".bool_to_string(seems_utf8($string2));
39?>