在7bits 128 chars ASCII范围内递增或递减,最安全的:
$CHAR = "l";
echo chr(ord($CHAR)+1)." ".chr(ord($CHAR)-1);
/* m k */
因此,通过递减a 得到反引号是正常的,因为ascii spec list
打印整个 ascii 范围:
for ($i = 0;$i < 127;$i++){
echo chr($i);
}
/* !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ */
更多关于ANSI7 bits ASCII的信息:man ascii
在 8 位扩展的 256 字符 UTF-8 范围内递增或递减。
这就是主机字符集开始不同的地方。但是这些字符集都可以在现代机器上使用。从php,最安全的是使用php-mbstring扩展:https://www.php.net/manual/en/function.mb-chr.php
扩展 ASCII(EASCII 或高位 ASCII)字符编码是
八位或更大的编码,包括标准七位
ASCII 字符,以及其他字符。 https://en.wikipedia.org/wiki/Extended_ASCII
更多信息,例如:man iso_8859-9
ISO 8859-1 West European languages (Latin-1)
ISO 8859-2 Central and East European languages (Latin-2)
ISO 8859-3 Southeast European and miscellaneous languages (Latin-3)
ISO 8859-4 Scandinavian/Baltic languages (Latin-4)
ISO 8859-5 Latin/Cyrillic
ISO 8859-6 Latin/Arabic
ISO 8859-7 Latin/Greek
ISO 8859-8 Latin/Hebrew
ISO 8859-9 Latin-1 modification for Turkish (Latin-5)
ISO 8859-10 Lappish/Nordic/Eskimo languages (Latin-6)
ISO 8859-11 Latin/Thai
ISO 8859-13 Baltic Rim languages (Latin-7)
ISO 8859-14 Celtic (Latin-8)
ISO 8859-15 West European languages (Latin-9)
ISO 8859-16 Romanian (Latin-10)
例如,我们可以在 ISO 8859-7 中找到 € 符号:
244 164 A4 € EURO SIGN
在 16 位 UTF-16 Unicode 范围内增加或减少 :
这是一种通过生成 html 实体并转换为 utf8 来生成整个 unicode 字符集的方法。 Run it online
for ($x = 0; $x < 262144; $x++){
echo html_entity_decode("&#".$x.";",ENT_NOQUOTES,"UTF-8");
}
同样的东西,但范围上升到(16^4 * 4)!
echo html_entity_decode('!',ENT_NOQUOTES,'UTF-8');
/* ! */
echo html_entity_decode('"',ENT_NOQUOTES,'UTF-8');
/* " */
要检索the unicode € symbol,请使用字符的base10 十进制表示。
echo html_entity_decode('€',ENT_NOQUOTES,'UTF-8');
/* € */
同一个符号,使用base16十六进制表示:
echo html_entity_decode('&#'.hexdec("20AC").';',ENT_NOQUOTES,'UTF-8');
/* € */
前32位为special control characters保留,输出垃圾������,但有意义。