|
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 : |
#!/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;