MagicWand的缩略图
以前用GD做缩略图,效率不高,而且图片处理的功能太弱,刚才安装了MagicWand,发现真是太强了,效率和功能等等可以比ps强。gd简直像个小娃娃,用新东方老罗的话就是:太方便了太方便了。为了熟悉环境,顺手写了一个做缩略图函数,摘录如下
Read more
encoding惹的祸
由于page使用的gbk,但是ajax需要使用utf8,虽然一直凑合,但终究出现了问题。下了狠心,将encoding统一为utf8,包括mysql,smarty html模版,发现效率大大增强。首先由于mysql数据已经是utf8,所以使用json就无需再encoding了。此外,dojo.io发送上的数据,php可以直接识别,不用手动解析。我前篇post中说的那种情况就不复存在(因为都是utf8),当然这里有个附加选项,所有dojo.io.bind,需要强制encoding:utf-8。否则dojo使用自己的encodeAsicii就坏事了。还好,现在解决了我一直担心的问题。
PHP decodeURIComponent实现
在使用dojo bind提交的时候,在php服务端接受的代码都是xxx形式,这是因为dojo.bind使用xmlhttp提交的时候,使用encodeURIComponent对提交的内容进行了encoding,在服务端接收的时候需要将其还原。对于Php5.1似乎可以使用html_entity_decode直接指定charset为utf-8来进行还原,但是对于php4则无法实现。Googling了半天,发现没有人解决,dojo的mailinglist有人提出过,但是没有解决,可能是php开发人员很少用dojo或者xmlhttp吧。没有办法,自己写了一个函数,虽然需要使用mb_string,但是也算是解决了这个问题,我在httprequest的consturctur中判断,如果content_type为application/x-www-form-urlencoded则进行decoding。本来是打算写一个filter或者interceptor的,但后来一想没有必要,直接交由httprequest处理得了。
/**
* Hacking for decoding encodeURIComponent() && DOJO_encodeAscii
*
* NOTE:This function need Mb_string extension
*
* @param string $body
* @return string
*/
function decodeURIComponent($uri) {
//decode decimal HTML entities added by web browser
$uri = preg_replace(‘/\d{2,5};/ue’, “utf8_entity_decode(‘$0′)”, $uri );
//decode hex HTML entities added by web browser
//$uri = preg_replace(‘/([a-fA-F0-7]{2,8});/ue’, “utf8_entity_decode(‘’.hexdec(‘$1′).’;')”, $uri );
return mb_convert_encoding($uri,’GBK’,'UTF-8′);
}
/**
* callback function for the decodeURIComponent
*
* Use Mb_string extension to decode utf-8 numericenties
*
* @param string $entity
* @return string
*/
function utf8_entity_decode($entity){
$convmap = array(0×0, 0×2FFFF, 0, 0xFFFF);
return mb_decode_numericentity($entity, $convmap,’utf-8′);
}