语法加亮
关于GeSHi处理多字节编码时的bug
deminy 在 周一, 2005-03-07 00:28 提交
GeSHi很可能是迄今为止最出色的PHP源代码加亮程序,本站就采用它来共享源代码资源。
非常遗憾的是GeSHi有一个很严重的bug:对于含有多字节编码的字符串的源代码不能正常显示。访客们也可以看到本站共享的源代码相当部分处于乱码状态,因为源代码里面含有中文(在电脑里,中文需要多字节进行编码)。
我知道,这不是一个严重的bug,因为根据我的使用经验来看,PHP在多字节处理方面很棒。我也相信,GeSHi的这个bug也不难解决。只是虽然这个bug已经被提出来好几个月了,但是GeSHi的作者(老外)迄今为止都没有解决这个问题。没什么好奇怪的,谁叫这些老外只使用abcdefg,不使用中文呢。
今天晚上无所事事,夜里的时候终于决定好好看看GeSHi的源代码,调试、跟踪来看看。终于发现原因了:GeSHi使用了一些字符串处理函数,而这些函数只对单字节编码字符串有效,对多字节编码字符串无效。
解决方案似乎也就很显然了:把使用到的substr、strpos、strlen等函数根据具体情况换成mb_substr、mb_strpos、mb_strlen等函数就大体解决问题了。
随后发了份email给GeSHi的作者,相信不久这个bug就能得到妥善的解决的。
非常遗憾的是GeSHi有一个很严重的bug:对于含有多字节编码的字符串的源代码不能正常显示。访客们也可以看到本站共享的源代码相当部分处于乱码状态,因为源代码里面含有中文(在电脑里,中文需要多字节进行编码)。
我知道,这不是一个严重的bug,因为根据我的使用经验来看,PHP在多字节处理方面很棒。我也相信,GeSHi的这个bug也不难解决。只是虽然这个bug已经被提出来好几个月了,但是GeSHi的作者(老外)迄今为止都没有解决这个问题。没什么好奇怪的,谁叫这些老外只使用abcdefg,不使用中文呢。
今天晚上无所事事,夜里的时候终于决定好好看看GeSHi的源代码,调试、跟踪来看看。终于发现原因了:GeSHi使用了一些字符串处理函数,而这些函数只对单字节编码字符串有效,对多字节编码字符串无效。
解决方案似乎也就很显然了:把使用到的substr、strpos、strlen等函数根据具体情况换成mb_substr、mb_strpos、mb_strlen等函数就大体解决问题了。
随后发了份email给GeSHi的作者,相信不久这个bug就能得到妥善的解决的。
类别: