1.3 关于“梗”

本节介绍一些“看似奇怪”的小知识,可能读者有所耳闻,一起来看看这些开玩笑的话中都蕴藏着哪些计算机技术。

1.PHP是最好的语言

“PHP是最好的语言”这个梗,出自PHP语言的函数名,虽然现在使用PHP做开发的人较多,用PHP语言开发的网站也数不胜数,但从本质上来看,PHP在有些方面十分令人费解,比如PHP的核心函数命名规则很不一致,有“strptime”这样的类C函数的名字,有“xml_set_external_entity_ref_handler”这样十分长却规范的命名,还有“nl2br”这样的简写方式命名,也有“stripcslashes”这样奇怪的长名。后来有人发现,当PHP还是只有不到100个函数的小型语言的时候,其作者决定用函数名的字符数量来作为函数的hash。由于这个“神奇”的决定,PHP的函数名长度要尽可能地长短有致、均匀分布,这种影响也一直持续至今。

2.“锟斤拷”“烫烫烫”“屯屯屯”与“锘锘锘”

先来看一首小诗:

手持两把锟斤拷,

口中疾呼烫烫烫。

脚踏千朵屯屯屯,

笑看万物锘锘锘。

这首诗可能怪异、令人费解,从技术层面讲,它的含义如下。

锟斤拷:这是一个GBK字符集和Unicode字符集之间的转换问题,有一些字符用Unicode无法表示,Unicode就会用一个占位符来表示这些文字,即“U+FFFD REPLACEMENT CHARACTER”。那么U+FFFD用UTF-8编码出来,多次重复,然后放到GBK等环境中显示的话,一个汉字2个字节,最终的结果就是:锟(0xEFBF),斤(0xBDEF),拷(0xBFBD)。

锟斤拷也曾出现在新闻中:

神舟十号11日17时38分发射,三位航天员公布链接指向神奇的“锟斤拷锟斤拷锟”,零时51分,恢复正常。

“烫烫烫”“屯屯屯”与“锘锘锘”:这些其实都是输出的乱码,若想输出一个字符串,却又忘记在字符串后加上0,那么计算机在输出时,就会超过字符串长度,而开发人员申请的内存后面经常被填充为“CCCCCCC…”,这样输出结果就成了著名的“烫烫烫”。