关于mbstring多字节字符串处理模块的相关设置

Add a comment

今天正好在网上看到一篇关于如何设置mbstring系列函数为php默认使用函数的一篇文章,顺便也就仔细看了看php.ini中mbstring部分的设置参数。mbstring系列函数在涉及到中文及其它亚洲字符集的开发中是经常使用的,研究一下还是有必要的。

先说文章中提及的一个参数:mbstring.func_overload。这个参数的好处在于当你已经开发了大量程序后发现需要处理多字节字符集的时候,不可能将之前的程序全部检查,将相关函数替换成mbstring多字节字符处理函数。这个时候你可以通过设置这个参数来使php默认使用mbstring系列函数来重载替代相对应的php内置函数(例如常用的substr()会被自动替换为mb_substr())。有5个可选值:

  • 0:代表不重载任何函数(默认值);
  • 1:代表重载mail()函数;
  • 2:代表重载str系列字符串处理函数;
  • 4:代表重载ereg系列正则处理函数;
  • 7:代表重载所有以上提及的函数。

不过在php手册中也提及了这么一句:

It is not recommended to use the function overloading option in the per-directory context, because it’s not confirmed yet to be stable enough in a production environment and may lead to undefined behaviour.

哈哈,慎用慎用,毕竟这么强大无视的参数还是谨慎使用为好,影响太大。打开后影响的函数列表如下:

mail()		-> mb_send_mail()
strlen()	-> mb_strlen()
strpos()	-> mb_strpos()
strrpos()	-> mb_strrpos()
substr()	-> mb_substr()
strtolower()	-> mb_strtolower()
strtoupper()	-> mb_strtoupper()
substr_count()	-> mb_substr_count()
ereg()		-> mb_ereg()
eregi()		-> mb_eregi()
ereg_replace()	-> mb_ereg_replace()
eregi_replace()	-> mb_eregi_replace()
split()		-> mb_split()

接下来几个参数也简略介绍一下,自己看注释理解的,可能有误:

  • mbstring.language:设置默认语言。默认值为neutral,就是UTF-8,这样就不错。
  • mbstring.internal_encoding:设置默认的内部编码。如果设置过mbstring.language,必须放置在之后,不然无法覆盖之前的设置。默认值NULL。
  • mbstring.http_input:默认的http输入编码。默认值pass,就是不处理。
  • mbstring.http_output:默认的http输出编码,前提是必须将output_buffering打开并将output_handler设置为mb_output_handler。默认值pass,也是不处理。
  • mbstring.encoding_translation:打开后将会自动将输入编码转换为internal_encoding所指定的编码(同样慎用,都交给机器未必是好事)。默认值Off,万幸。
  • mbstring.detect_order:设置编码的检测顺序,在使用mb_detect_encoding而又没有在第二个参数中指明检测编码顺讯列表时,将会以这里设置的为准。默认值auto,在language为neutral时也就是代表检测顺序为(ASCII, UTF-8)。
  • mbstring.substitute_character:当编码无法转换时的处理方式。默认值为NULL,也就是不显示无法转换的字符。你也可以设置为long,显示字符的hex编码;或者指定其他特定字符(例如”@_@”,呵呵)。
  • mbstring.strict_detection:是否打开严格的编码检测模式,这个找了半天才知道什么意思,在处理有不同编码或错误编码字符混杂情况(例如mb_detect_encoding(”testä”))下打开这个参数能够防止mb_detect_encoding返回错误的编码。可以参见PHP Bug24309。默认值为Off。
  • mbstring.script_encoding:PHP脚本的默认编码。默认值为NULL。

大多数情况下默认值好像工作的就挺好,而且最好程序中也不要显式依赖于ini设置。使用mbstring系列函数时明确指明编码类型也许是一种更好的处理方式。在Unicode情况下,可以考虑设置为以下形式。

mbstring.language		= neutral
mbstring.internal_encoding	= UTF-8
mbstring.encoding_translation	= Off
mbstring.http_input		= auto
mbstring.http_output		= UTF-8
mbstring.detect_order		= auto
mbstring.substitute_character	= none

顺利解决 Firefox 3 无法保存设置的问题

Add a comment

安装了Firefox 3之后的日子,出现了一件怪事,单位的Firefox 3.0用的好好的,家里的出现了所有设置在关闭浏览器后消失,再开启变为原始状态的怪毛病。网上搜索了一下,发现是与\Documents and Settings\{你所使用的用户名}\Application Data\Mozilla\Firefox\Profiles\{一串随机字符}.default下的pref.js有关。无论我如何设置浏览器,pref.js始终不变。尝试删除pref.js让浏览器重建,却发现无法删除,关闭Firefox 3后依然无法删除,始终提示有进程在使用。下了个WhoLockMe看看是何方神圣,发现是PPLive所带的一个PP加速器锁定了该文件,删除PP加速器后一切正常。不过至于为何就不瞭了,如果有其它同学碰到这个问题,也请重点关注pref.js,这是保持所有firefox设置的文件,也是about:config中看到的那些。

另:今天看到了一个Firefox 3的小彩蛋,在地址栏中输入about:robots看看:)总算知道为啥Volcano老大之前的msn签名是“机器人有咬不得的闪亮的金属屁股。”,哈哈,小生愚钝了。。。

Firefox 3.0 正式发布

1 Comment

2008.6.18北京时间01:00正式发布Firefox3的下载,本来想等到1点抢鲜下载的,最后还是没有熬住,顺带着连意法大战都没精神看了。到单位后立马开始下载了一份,安装速度倒是很快,之后使用的感觉也是区别不大。毕竟从RC到Release不会有大的区别,事实上也不会区别,可以参看Volcano老大的说法

具体使用上面的差别之前提过一些,对于页面开发人员来说,对于js和css的支持改进是绝对值得关注的。可以尝试着在ff环境下使用些更高级的手段来得到更好的页面效果。

Firefox 3.0 RC1使用初体验之二

Add a comment

自从下载Firefox 3.0 RC1(以下简称FF3)后,使用已近十天。这里就简单说说感受。

FF3总体来说,毕竟还不是正式版本,不稳定的情况还是有不少。比如在Vista上表现不佳,据同事反映,FF3在Vista上的第一次启动时就出现界面上的bug。另外在Vista上会出现频繁崩溃的情况。以我个人在XP上的使用来说,大部分时间表现正常,但是内存和CPU占用还是不小。CPU可能飚至80-90,内存大致在3位数。假死情况也是时有发生,不过就是有时候能恢复正常,比FF2表现略佳。

好的方面也是有,Tab切换的速度,页面的流畅度都有提升,但是这个是感觉,因人而异。智能地址栏还是很有特点,包括一键站点信息,还是很方便的。书签方面的改进并没有去体验,还是保持使用del.icio.us的插件,所有的书签也是存放在上面,本地完全不存放。

插件方面不必有大的担心,总是会有更新保证你的使用,需要的是等待。一些插件的使用情况可以参见前一篇

FF3RC2的话应该在6.6能够面世,不清楚还有没有RC3。RC多些倒也无所谓,我只希望FF3面世有一个稳定的表现,对于FF3的市场拓展应该是很有好处。FF目前也有一个活动,是承诺在下载日下载Firefox 3来创造吉尼斯世界记录。我也参加了,不过要是参加的人都能发些纪念品就好了,哈哈哈。。。

Firefox 3.0 RC1使用初体验

Add a comment

今天终于对于firefox 2.0版本的内存及CPU使用问题忍无可忍!在本身就很慢的破机器上,firefox更是日趋不稳定。偏巧我又是个已经离不开firefox的使用者了,于是下决心试试之前还不是很想切换的3.0RC1。不想切换的原因很简单,做小白鼠是辛苦的,要面对很多问题。不过既然RC1了,而且3.0也不是出来一时半会了,想来能从www上获得相当的支持。

下载安装不表。安装是全新的,之前把FF2的所有目录全部删除,迎接3的到来。

安装以后打开的第一感觉就是快。界面上改动不表,并没有太注意这些细节。但是地址栏还是值得提一提,确实方便,提示功能比以前要更实用,打入关键字后会搜索历史并显示标题及链接,关键字有下划线表示,中文支持亦备。

打开附加组件菜单,首先默认显示推荐组件,个人倒以为未必好。虽然推荐的都是很好的东西,但未必各个用得到。但是集成了组件搜索,还是不错的,只要记得大概的名字,获取还是很快的,值得推荐。

不过说到组件,还是有很多不能兼容的。相信并不是问题,并且这也是一次洗牌的过程,FF的插件极大丰富,功能无可避免有重复的。这次正好可以淘汰一批已经无人或无能力维护的组件,让新人崭露头角。下面是张列表,其中包括我原来FF2中使用的组件,列出在FF3中的情况:

组件名 FF3RC1兼容与否 FF3中可替代组件
Adblock Plus Y  
Adblock Filterset.G Updater Y  
Better Gmail 2 Y  
Customize Google Y  
Delicious Bookmarks N 已有测试版本
Fasterfox N  
Firebug N 已有测试版本
Fire Cookie N  
Gladder N  
Gmail Manager Y
Gspace Y  
Google Browser Sync N  
Google Notes Y  
Google Toolbar N  
Html Validator N 已有测试版本
IE Tab Y  
Media Wrap Y  
Search Status Y  
Selenium IDE N  
Super DragAndGo N Easy DragToGo
TabMixPlus N  
Web Developer Y  
YSlow N  

总的来说,大部分组件还是有问题,尤其是外部提供,未收录在firefox组件目录中的,如google的相关等。好在基本功能还能满足,因此问题不大,还能凑合。而且很多组件都在新版本开发中,应该过段时间会好很多。开源社区的热情是不能被低估的。再者说来,就冲着FF3带来的性能提升,也是值得升级的。

关于组件的情况,可以参考这个帖子,列的很详细了,包括了一些beta版的老组件。