KGRKJGETMRETU895U-589TY5MIGM5JGB5SDFESFREWTGR54TY
Server : Apache/2.4.62
System : FreeBSD fbsdweb2.web.rcn.net 14.1-RELEASE FreeBSD 14.1-RELEASE releng/14.1-n267679-10e31f0946d8 GENERIC amd64
User : www ( 80)
PHP Version : 8.3.8
Disable Function : NONE
Directory :  /domains/mandarintools/cgi-bin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /domains/mandarintools/cgi-bin/numbersu8.pl
#!/usr/bin/perl

use lib qw(.);
use ChineseNumbersU8;

use CGI qw(:standard);

# hex2utf8:  Take a string of 4 hex digits (0-9A-F) and convert it
# to the corresponding (1, 2, or 3 byte) UTF-8 representation.

sub hex2utf8 {
    my($hexchar) = shift;
    #print "$hexchar \n";
    if ($hexchar !~ m/^0x/) {
	$hexchar = "0x" . $hexchar;
    }
    $binchar = oct($hexchar);
    if ($binchar <= 127) {
	$retval = pack("C", $binchar);
    } elsif ($binchar <= 2047) {
	$bin1 = ($binchar >> 6) | 0xC0;
	$bin2 = ($binchar & 0x3F) | 0x80;
	$retval = pack("C2", $bin1, $bin2);
    } else {
	$bin1 = ($binchar >> 12) | 0xE0;
	$bin2 = (($binchar & 0x0FFF) >> 6) | 0x80;
	$bin3 = ($binchar & 0x003F) | 0x80;
	$retval = pack("C*", $bin1, $bin2, $bin3);
#	#print "in 3 char version with $hexchar and $retval bin1 $bin1 bin2 $bin2 bin3 $bin3\n";
    }
    $retval;
}

sub utf82hex {
    my($utfstring) = shift;
    my($unichar, $unival, $unistring, $i, $int1, $int2, $int3, $byte1, $byte2, $byte3);

    my($i) = 0;
    while ($i < length($utfstring)) {
	$byte1 = substr($utfstring, $i, 1);
	if (unpack("C", $byte1) <= 0x7F) { # 1 byte long (ASCII)
	    $unichar = sprintf("00%02x", $byte1);
	    $i++;
	} elsif ((unpack("C", $byte1) & 0xE0) == 0xC0) { # 2 bytes long
	    $byte2 = substr($utfstring, $i+1, 1);
	    $int1 = unpack("C", $byte1) & 0x1F;
	    $int1 <<= 0x06;
	    $int2 = unpack("C", $byte2) & 0x3F;
	    $unival = $int1 | $int2;
	    $unichar = sprintf("%02x%02x", (0xFF00 & $unival) >> 8, (0x00FF & $unival));
	    $i += 2;
	} else {  # 3 bytes long
	    $byte2 = substr($utfstring, $i+1, 1);
	    $byte3 = substr($utfstring, $i+2, 1);

	    $int1 = 0x0F & unpack("C", $byte1);
	    $int1 <<= 12;
	    $int2 = 0x3F & unpack("C", $byte2);
	    $int2 <<= 6;
	    $int3 = 0x3F & unpack("C", $byte3);
	    $unival = $int1 | $int2 | $int3;
	    $unichar = sprintf("%02x%02x", (0xFF00 & $unival) >> 8, (0x00FF & $unival));
	    $i += 3;
	}
	$unistring .= $unichar;
    }
    return $unistring;
}


print "Content-type: text/plain; charset=utf8\n\n";

$englishtype = param('englishtype');
$chinesetype = param('chinesetype');

$numbers = param('numbers');

$numbers =~ s/\%u([0-9a-fA-F]{4})/&hex2utf8($1)/eg;

$numbers =~ s/ //g;

@numbers = split(/[\r\n]+/, $numbers);

foreach $number (@numbers) {

    if ($number =~ m/[\x80-\xff]/) {
	$result .= "$number = " . ChineseNumbers->ChineseToEnglishNumber($number, $englishtype) . "<br>\n";
    } else {
	$number =~ s/,//g;
	$cnumber = ChineseNumbers->EnglishToChineseNumber($number, $chinesetype);

	if (param('usegif') eq "on") {
	    $gifresult = "";
	    for ($j = 0; $j < length($cnumber); $j+=3) {
		$hex = &utf82hex(substr($cnumber, $j, 3));
		$gifresult .= "<IMG SRC=\"ugif/" . uc($hex)  . ".gif\">";
	    }
	    $result .= "$number = " . $gifresult . "<br>\n";
	} else {
	    $result .= "$number = " . $cnumber . "<br>\n";
	}

    }

}

print $result;


Anon7 - 2021