Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>I've worked on something. This will detect the range of each character. I've only put Armenian, Latin and Russian in to start with. If anyone else has need for this, you'll need to find the character ranges to the detectRanges function from a source like: <a href="http://jrgraphix.net/r/Unicode/" rel="nofollow">http://jrgraphix.net/r/Unicode/</a> I'd like to see if there is a better way of doing that part. Make sure any alphabetic character in the ranges are lower case.</p> <pre><code>mb_internal_encoding("UTF-8"); echo header( "Content-Type: text/html;charset=UTF-8", true ); class DetectUnicodeRanges { function entityToUTF8( $number ) { if( $number &lt; 0 ) return false; # Replace ASCII characters if( $number &lt; 128 ) return chr( $number ); # Replace illegal Windows characters if( $number &lt; 160 ) { switch( $number ) { case 128: $conversion = 8364; break; case 129: $conversion = 160; break; case 130: $conversion = 8218; break; case 131: $conversion = 402; break; case 132: $conversion = 8222; break; case 133: $conversion = 8230; break; case 134: $conversion = 8224; break; case 135: $conversion = 8225; break; case 136: $conversion = 710; break; case 137: $conversion = 8240; break; case 138: $conversion = 352; break; case 139: $conversion = 8249; break; case 140: $conversion = 338; break; case 141: $conversion = 160; break; case 142: $conversion = 381; break; case 143: $conversion = 160; break; case 144: $conversion = 160; break; case 145: $conversion = 8216; break; case 146: $conversion = 8217; break; case 147: $conversion = 8220; break; case 148: $conversion = 8221; break; case 149: $conversion = 8226; break; case 150: $conversion = 8211; break; case 151: $conversion = 8212; break; case 152: $conversion = 732; break; case 153: $conversion = 8482; break; case 154: $conversion = 353; break; case 155: $conversion = 8250; break; case 156: $conversion = 339; break; case 157: $conversion = 160; break; case 158: $conversion = 382; break; case 159: $conversion = 376; break; } return $conversion; } if ( $number &lt; 2048 ) return chr( ($number &gt;&gt; 6 ) + 192 ) . chr( ( $number &amp; 63 ) + 128 ); if ( $number &lt; 65536 ) return chr( ( $number &gt;&gt; 12 ) + 224 ) . chr( ( ( $number &gt;&gt; 6 ) &amp; 63 ) + 128 ) . chr( ( $number &amp; 63 ) + 128 ); if ( $number &lt; 2097152 ) return chr( ( $number &gt;&gt; 18 ) + 240 ) . chr( ( ( $number &gt;&gt; 12 ) &amp; 63 ) + 128 ) . chr( ( ( $number &gt;&gt; 6 ) &amp; 63 ) + 128 ) . chr( ( $number &amp; 63 ) + 128 ); return false; } function MBStrToHexes( $str ) { $str = mb_convert_encoding( $str, 'UCS-4BE' ); $hexs = array(); for( $i = 0; $i &lt; mb_strlen( $str, 'UCS-4BE' ); $i++ ) { $s2 = mb_substr( $str, $i, 1, 'UCS-4BE' ); $val = unpack( 'N', $s2 ); $hexs[] = str_pad( dechex( $val[1] ), 4, 0, STR_PAD_LEFT ); } return( $hexs ); } function detectRanges( $str ) { $hexes = $this-&gt;MBStrToHexes( $str ); foreach( $hexes as $hex ) { if( ( $hex &gt;= '0041' ) &amp;&amp; ( $hex &lt;= '024f' ) ) echo $this-&gt;entityToUTF8( hexdec($hex) ) . ' - Latin&lt;br /&gt;'; elseif( ( $hex &gt;= '0400' ) &amp;&amp; ( $hex &lt;= '04ff' ) ) echo $this-&gt;entityToUTF8( hexdec($hex) ) . ' - Cyrillic&lt;br /&gt;'; elseif( ( $hex &gt;= '0530' ) &amp;&amp; ( $hex &lt;= '058f' ) ) echo $this-&gt;entityToUTF8( hexdec($hex) ) . ' - Armenian&lt;br /&gt;'; else echo $this-&gt;entityToUTF8( $hex ) . ' - Some Other Range&lt;br /&gt;'; } } } #$strB = 'Cornelius Trow'; $strB = 'Cornelius Српски Հայաստանի'; #$strB = 'Հայաստանի Հանրապետություն'; echo 'Testing String: ' . $strB . '&lt;br /&gt;'; $dur = new DetectUnicodeRanges(); $dur-&gt;detectRanges( $strB ); </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload