Created
January 30, 2023 20:37
-
-
Save codemasher/91da33c44bfb48a81a6c1426bb8e4338 to your computer and use it in GitHub Desktop.
Create a table of GB2312/Hanzi in PHP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* gb2312-table.php | |
* | |
* @see https://en.wikipedia.org/wiki/GB_2312 | |
* @see http://www.herongyang.com/GB2312/Introduction-of-GB2312.html | |
* @see https://en.wikipedia.org/wiki/GBK_(character_encoding)#Encoding | |
* | |
* @created 30.01.2023 | |
* @author smiley <[email protected]> | |
* @copyright 2023 smiley | |
* @license MIT | |
*/ | |
$list = []; | |
for($byte1 = 0xa1; $byte1 < 0xf8; $byte1 += 0x1){ | |
if($byte1 > 0xa9 && $byte1 < 0xb0){ | |
continue; | |
} | |
$list[$byte1] = array_fill(0xa0, 96, null); // 0xa1 - 0xfe | |
for($byte2 = 0xa1; $byte2 < 0xff; $byte2++){ | |
$list[$byte1][$byte2] = chr($byte1).chr($byte2); | |
} | |
} | |
// output | |
if(php_sapi_name() !== 'cli'){ | |
echo '<!doctype html> | |
<html lang="cn"> | |
<head> | |
<meta charset="UTF-8"> | |
<title>GB2312 Hanzi Code Table</title> | |
</head> | |
<body> | |
'; | |
foreach($list as $chars){ | |
$chars = array_map(fn($chr) => ($chr !== null ? mb_convert_encoding($chr, 'UTF-8', 'GB2312') : null), $chars); | |
$rows = []; | |
foreach(array_chunk($chars, 16, true) as $row){ | |
$rows[] = sprintf('<td>%s</td>', implode('</td><td>', $row)); | |
} | |
printf("<table><tr>%s</tr></table>\n", implode('</tr><tr>', $rows)); | |
} | |
echo '</body>'; | |
} | |
else{ | |
foreach($list as $chars){ | |
$chars = array_map(fn($chr) => ($chr !== null ? mb_convert_encoding($chr, 'UTF-8', 'GB2312') : null), $chars); | |
$rows = []; | |
foreach(array_chunk($chars, 16, true) as $row){ | |
$rows[] = implode(' ', $row); | |
} | |
printf("%s\n", implode("\n", $rows)); | |
} | |
} | |
exit; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment