bianbian coding life

便便代码人生: 关注技术, 翻译文档, 偶尔动动手

Archive for March, 2007

[原]WinCE下的CAB安装文件解包原理

Posted by bianbian on 2007-03-28 04:24


本文Tags: ,

看了一下,其实是个标准的CAB压缩文件,在此基础上增加了“_setup.xml”作为描述文件。
此外,所有文件名都要符合DOS时代“8.3”的文件名规范,而且主文件名不满8位用0在左端补齐;超过八位就用“~1”“~2”结尾。因为有描述文件“_setup.xml”的存在,所以解包一个CAB安装文件是挺容易的(能还原为标准文件名、看出安装配置、注册表编写等)。目前有现成的软件WinCE CAB Manager可以用,我只是探讨一下方法;而且发现解包一点技术难度都没有。
xml文件主要结构和简单说明:

  1. <wap-provisioningdoc>
  2. <characteristic type="Install">
  3. <!--
  4. 参数配置段,其中“SetupDLL”表明是否带有安装任务DLL文件。此DLL需要4个标准入口,为了执行相应的任务,即:Install_Init、Install_Exit、Uninstall_Init、Uninstall_Exit。这里可以完成一些额外的操作任务:比如在安装结束前执行某个程序,卸载前删除所有运行期间增加的注册表键值等等。我估计WinCE下的木马得用到这个东西,呵呵。
  5. -->
  6. <parm name="SetupDLL" value="1" />
  7. <!--“InstallDir”表示安装目录,“%CE1%”表示 Program Files -->
  8. <parm name="InstallDir" value="%CE1%\Setup" translation="install" />
  9. <!-- 安装的总共文件数目 -->
  10. <parm name="NumFiles" value="4" />
  11. <!-- 写入注册表键值数目 -->
  12. <parm name="NumRegKeys" value="0" />
  13. <parm name="NumRegVals" value="0" />
  14. <!-- 产生的快捷方式数目 -->
  15. <parm name="NumShortcuts" value="0" />
  16. </characteristic>
  17. <!-- 下面开始每个文件的描述,包括原始文件名、安装路径等等 -->
  18. <characteristic type="FileOperation">
  19.   <!-- 这里能看出 00Target.001 解压以后放到安装目录的 Target.exe -->
  20.   <characteristic type="%InstallDir%" translation="install">
  21.   <characteristic type="MakeDir" />
  22.   <characteristic type="Target.exe" translation="install">
  23.     <characteristic type="Extract">
  24.     <parm name="Source" value="00Target.001" />
  25.     </characteristic>
  26.   </characteristic>
  27. </characteristic>
  28. <!-- 下面开始注册表和快捷方式的描述,基本类似,此处略去 -->
  29. <characteristic type="Registry">
  30. </characteristic>
  31. </wap-provisioningdoc>

可以看出,微软还是挺聪明的。一来制作简单,不需要额外的安装制作程序;二来又推广了它发明的CAB压缩格式,这种格式除了微软自己的安装程序里用(Windows、Office的安装盘里都有一拖拖的cab)世界上其他人是不用的,现在为了制作WinCE的安装程序,不得不用;三来安全性有保障,拿到一个CAB谁都能知道它进行了哪些操作(其实也可以绕过,因为可以把额外操作写到DLL里,也无法完全避免病毒)。

标签: ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Technology, WinCE | 3 Comments »

[嗯]招行终端又是VB做的前台

Posted by bianbian on 2007-03-25 01:51


本文Tags:

看惯工行的Windows蓝屏。用了招行刚两天,就发现了好多bug。怎么老让我碰到呢。
从Run time error上,可以看出是VB写的。从弹出的图标上,可以看出是Win98。
听说全世界应用软件70%是VB。
用手机拍了两张(点击可以最大):
一张是ActiveX component can’t create object.
一张是Automation error.
招行终端错误 招行终端错误

标签:

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Uncategorized | 2 Comments »

[怒]招行信用卡800破系统气死我了

Posted by bianbian on 2007-03-22 11:07


本文Tags: ,

好不容易申请了个卡。详见:最近真是背,咳。。。。可怜的信用卡终于申请下来了
今天开卡忘记当时住宅电话填的是啥了。。。于是转人工服务。。。
稍候。。。稍候。。。不过客服MM真是有礼貌,验证一些资料,然后帮我开通了。
然后问她“查询密码怎么设?”
回答“帮您接通语音自助系统可以自己设,好吗?”
我当然好了,心里想态度真不错。但是接下来的我被气死了。
(我们都忘了一个基本事实,我已经把电话忘记了?!她好歹要把电话告诉我吧?!)
以下过程重复了N次,最后只能把电话摔了。
过程1:800-820-5555,按1-2转信用卡密码服务。结果输了身份证,输了生日,又要输电话。。验证中,电话输错,不能继续。。。
过程2:800-820-5555,按9转人工服务(看来只能人工救我了)。这个其实也不是马上转人工。因为密码根本没有设置,按了######后系统又开始问身份证,问生日,又要输电话(好像是为了设置密码)。。。验证中,电话输错,请重新输入。。。。吐血中。。。。
过程3:800-820-5555,按1-1开卡(最后没辙了,再开一次吧,开卡的时候输错了会自动转人工)。又开始输了身份证,输了信用卡卡号,输了生日。。。这次直接挂机了(应该是因为这个卡已经开通了的缘故)。。。。

我抱着电话长叹:客服MM,我到底怎样才能听到您的声音?!

以下三行转自招行信用卡网站:
★按“9”转接服务专员:
  招商银行信用卡为您提供每天24小时、全年无休的专人服务,您只需输入您的证件号码或
  卡号,以及6位查询密码(忘记密码请按6个#号键),我们随时为您提供热忱专业的服务!
~~~~~~~~~~~~~~~~~~~~~这里绝对有逻辑问题!因为没有设置密码只能按6个#号键,但是按了6个#号后,系统会进入“用户重新设置查询密码”程序,而设置密码是必须所有资料对才能设置的。像我这样住宅电话忘记的是没有办法“重新设置查询密码”的。程序上说就是死循环了

刚才又拨了电话,按了2进入“挂失及交易查询”(这肯定是人工服务),让客服MM帮我转接。客服MM说,现在人员不够,不能帮你转接,明天白天再打过来吧。。。。
虽然我还是生气,好歹是一线生机。。。。。明天一定要投诉这个破系统!!!!

标签: ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Not IT | 3 Comments »

[嗯]俺不怕死,俺怕被骗

Posted by bianbian on 2007-03-22 08:40


本文Tags:

今天回南京,到西湖边转车。刚下公车就遇到一个“尼姑”,看见我马上就迎了上来,口中说着“小伙子,看你福光满面,送你个平安符——”
我又不信这些虚无缥缈的东西,而且第一反应就是这是个骗子,侧身想走。
没想这个“尼姑”伸手就拦住了我,说:“看你面相好,送你的,不要钱的!保你全家平安”
人都是爱听好话的,加上那时车坐得晕晕的,反应不过来,就接过来一个小铜片了:“谢谢”。咱得有点礼貌,说完就想走,走之前想看看西湖,虽然来杭州几十趟了,西湖还是不错的。
“哎,先别急着走,在这里签个名。”签就签吧,后来才知道这是缓兵之计。
一边把自己名字写得鸡爪子自己也认不出来,一边就听她老人家说话了:“怎么也捐点香火钱吧?”
我一愣:“这不免费的吗?”
“你看,人家都‘捐’了。只要捐了,佛会保佑你们全家的。”。我于是发现那个名单上刚才被她用个哪里的大和尚照片盖住的部分原来都是钱款。看着上面写着100,50,。。。最小也就20的。。。。
“人家喜欢被骗我就要跟着骗啊?”我反问她。
这下“尼姑”怒了:“告诉你,小伙子,这是平安符。不求去一家人不平安的~”
得,还咒我了。“俺不怕死,俺怕被骗!”把符丢还给她,俺就头也不回地走了。。。
还没完呢,后面传来声音“意思一下就行,两块也成啊~”
我靠!

回来一查,相关链接:假和尚行骗三亚假尼姑骗钱“四步曲”。。。。。

今天赶着回来,运气她了。不然好好教育她一番。“佛是什么?”“为什么信佛?”想必她都没有我明白。
一个人活着,心理健康,无心为恶就够了。何必要借助这些精神手段,心理暗示来迫使自己、压抑自己。我活得坦荡荡,开心心,让自己快乐向上。像我这种想得明白的人,是不需要借助宗教的力量的;更何况这些打着宗教名义的骗子,真是愚昧可恨。
摘录释迦牟尼仙逝前的遗言:

最后的教诲
  在萨罗国的娑罗树林,佛对他的弟子,作了最后一次教诲。佛说——

要自己度自己,不要依靠其他。要为自己作照明,要以我的教义作照明,不要依其他外道教义。
  想一想,我们的形躯,它们都污秽不净。想一想,我们的生命,是如此的短暂。想一想,世上一切都是无常。只要依循我的教诲,你们都会解脱。我的教诲值得你们永远记取,它们是永恒的财富,如果依循我的教诲,你们永远快乐。
  我的教诲要点是:你们要降服自己的心,要远离贪欲。要使自己行于正轨,要使自己的心清净,要使自己忠诚。你们要记住:形躯生命是短暂的。如果能够这样想,你们便可以远离贪欲、烦恼,你们可以远离不善。
  当你们发现自己被贪欲引诱的时候,你们一定要自己降服自己。你们要做自己心的主人,不要做心的奴隶。
  贪欲之魔,经常在寻找机会欺骗你们的心。如果有一条毒蛇,住在你的屋子里,你想得到安宁,你必须首先把它驱逐出去。你必须驱逐你生命里的贪欲毒蛇,你必须善自护持你的心。
要知道,一个人的心,可以使人成佛,也可以使人成为畜牲。心悟成佛。心迷成魔。所以你们必须降服自己的心,不要使它离开正轨而入歧途。
  你们要依循我的教诲,不要彼此争辩,要互相敬重,你们不要像水和油,彼此排斥,你们要像水和乳,互相交融。
  你们要在一起学习,一起研究。你们要在一起共同修行。你们不要把精力和时间,虚耗在那些怠惰的生活和无益的争论中。你们要以悟道的花朵和果实为乐,这是法乐。
我的一切教诲,都是由我亲证而来。你们要好好地依循它,在任何情形下,都要依循它的精神而行。如果你们疏忽了它,即使站在我身边,也看不见我。如果你们依循我的教诲,即使远离我,实际上就在我的身边。
  我的弟子们,我最后的时候已经来到,我们分别在即。不要悲泣,生命本来就是无常,没有人能避免。我也一样。我的形躯生命就要消逝,它像一辆腐朽的车辆总要毁坏。
  不要作无益的悲泣,要记住生命是短暂的,是无常。你们要由此证悟“空”理,由“无常”证悟“真常”。
  我的弟子们,你们不要忘记,死亡只是形躯生命的消逝。形躯生命由父母而来,由粮食而养育。它们不能避免老病和死亡。但我的真正生命是法身,不是形躯。形躯会消逝,但真常的法身却永恒,不生不灭。见到形躯的我,你们未见佛。依循我的教诲,即是见佛。
  在我入灭之后,我的教诲就是你们的老师。依循我的教诲而行,你们一定会见到我。
  在最近的四十五年来,我已把所有的一切,全部教给了你们。我的教诲没有秘密,没有隐藏,一点一滴地、全部地、公开地、清楚地教给了你们。我亲爱的弟子们,我的教诲至此结束,在短时间内,我就要入涅槃。以上就是我对你们的最后教诲。

标签:

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Not IT | 1 Comment »

[原]php的base64解码函数

Posted by bianbian on 2007-03-19 04:22


本文Tags: ,

调用 base64_decode() 就行了。
我承认我很BT地觉得是不是php的这个函数有问题,导致我原先提到的问题产生:php处理base64编码和Unicode客户端交互的问题
于是我照着某文档,重新实现了一下。结果发现是一样的(废话)。-___-!!
我承认我错了,当然前面那个问题不是php的原因。不过既然已经写了,我就贴一下吧。至少base64解码俺是会了。哈哈,对了,还有C语言实现的base64解码,下次也来贴一下。

  1. //php功能等同于base64_decode(),所以没有任何实际用途
  2. function my_base64_decode(&$str)
  3. {
  4.     $Bstr_base64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
  5.     $len = strlen($str);
  6.     if ($len % 4 !=0)
  7.         return '';
  8.     $res = $bins = '';
  9.     for ($i = 0; $i < $len; $i++)
  10.     {
  11.         $nChar = substr($str, $i, 1);
  12.         if ($nChar == '=')
  13.             break;
  14.         $oldValue = strpos($Bstr_base64, $nChar);
  15.         $binValue = substr('000000' . decbin($oldValue), -6);
  16.         $bins .= $binValue;
  17.        
  18.         if (strlen($bins) >= 8)
  19.         {
  20.             $deChar = substr($bins, 0, 8);
  21.             $bins = substr($bins, 8);
  22.             $res .= chr(bindec($deChar));
  23.         }
  24.     }
  25.    
  26.     return $res;
  27. }
标签: ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Technology, php | 3 Comments »

[原]php处理base64编码和Unicode客户端交互的问题

Posted by bianbian on 2007-03-19 01:14


本文Tags: , , , ,

最近才对编码问题真正深入研究。因为我碰到了这个问题:客户端传过来的是对UTF-16的base64编码,而php没有办法正确解码。
有关编码,可以先看看这篇文章:字符,字节和编码
关于UTF-8和UTF-16,可以参考:谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
有关URL的base64处理,可以参考这篇:通过 URL 传递 base64 编码参数的问题
摘录如下:

一般情况下,URL 中的参数应使用 url 编码规则,即把参数字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。但是对于带有中文的参数来说,这种编码会使编码后的字符串变得很长。如果希望有短一点的方式对参数编码,可以采用 base64 编码方式对字符串进行编码,但是 base64 编码方式不能处理 JavaScript 中的中文,因为 JavaScript 中的中文都是以 UTF-16 方式保存的。而 base64 只能处理单字节字符,所以不能直接用 base64 对带有中文的 JavaScript 字符串进行编码。但是可以通过 utf.js 这个程序中提供的 utf16to8 来将 UTF-16 编码的中文先转化为 UTF-8 方式,然后再进行 base64 编码。这样编码后的字符串,在传递到服务器端后可以直接通过 base64_decode 解码成 UTF-8 的中文字符串。但是还有个问题需要注意。base64 编码中使用了加号(+),而 + 在 URL 传递时会被当成空格,因此必须要将 base64 编码后的字符串中的加号替换成 %2B 才能当作 URL 参数进行传递。否则在服务器端解码后就会出错。

不过,我对上述的“而 base64 只能处理单字节字符”有疑问,这是base64的标准规定,还是php的缺陷?
如果是php的缺陷,我想应该能写一个针对UTF-16的base64解码函数。这样就不需要客户端来进行UTF16转成UTF8了。

补充:
按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)
上面第二篇摘录如下:

UTF-8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如收到一个“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那么这是“奎”还是“乙”?

Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。BOM是一个有点小聪明的想法:

在UCS编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符”ZERO WIDTH NO-BREAK SPACE”。

这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符”ZERO WIDTH NO-BREAK SPACE”又被称作BOM。

UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符”ZERO WIDTH NO-BREAK SPACE”的UTF-8编码是EF BB BF(读者可以用我们前面介绍的编码方法验证一下)。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。

Windows就是使用BOM来标记文本文件的编码方式的。

也就是说,base64编码必须针对单字节。从这个角度说,是不能对UTF-16的字串进行base64编码操作的。难怪php解码后得到的结果不一致。原来问题不是出在php上。

我又看了客户端base64编码部分的代码,确实是客户端的问题。客户端用了“(const BYTE*)sSrcBuf ”把UTF-16的双字节强制转为BYTE流之后进行base64编码,结果是错误的。难怪我解码以后英文字符之间都有莫名奇妙的“空格”(实际是“00”,但是记事本看网页源代码上的“00”显示成空格)。
实际上是这样的:比如“ABC”,UTF-8字节流是“41 42 43”。而UTF-16则是“41 00 42 00 43 00”,所以“(const BYTE*)sSrcBuf ”之后,“00”就被作为单独的一个字节进行了转码,所以解码以后就还原为UTF-8的字节流“41 00 42 00 43 00”,这时候跟初始的“41 42 43”已经不一致了(print的时候只能打出“A”)。难怪我的SQL会报出“ERROR: unterminated quoted string at or near “‘A” at character”的错,因为数据库读取SQL读到“00”就认为结束了。
这时候我冒出一个想法,要是服务器端解码以后再强制把字节流当做UTF-16转为UTF-8,结果不就一样了吗?
事实证明我的想法是正确的:

  1. $utf16 = chr(hexdec('FF')) . chr(hexdec('FE')) . base64_decode($_GET[abc]);
  2. print(iconv('UTF-16', 'UTF-8', $utf16));
  3. //输出"ABC",这是对的!

最后还有一个问题,UTF-16的BOM不一定是FF FE,也可能是FE FF。这怎么办?要是有ASCII字符还好办,两个两个的找,看“00”是在前还是在后。要是双字节都有内容呢?举上面文章的例子:“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那么这是“奎”还是“乙”?
这个问题单纯改服务器端php没有办法解决。最终的解决办法只有两个:
1)如上面文章所说,客户端UTF-16先转成UTF-8再base64编码,再提交;显示的时候转回UTF-16
2)客户端可以基于UTF-16的字节流base64编码,但是提交的时候要带上“BOM”,即指明是“FFFE”,还是“FEFF”

当然,如果能确定客户端的Unicode的BOM方式,上面的2)也可以不用。
直接在服务器端加上BOM标记进行转码即可。
好像Windows下都是FFFE的,所以可以直接用这个:

  1. //加上UTF-16 BOM的base64解码(客户端是根据FFFE的Unicode base64的)
  2. function get_utf8_from_base64_utf16(&$str)
  3. {   
  4.     $utf16 = chr(hexdec('FF')) . chr(hexdec('FE')) . base64_decode($str);
  5.     return iconv('UTF-16', 'UTF-8', $utf16);
  6. }
标签: , , , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Technology, php | 2 Comments »

[原]超级简单访问PostgreSQL的小型php类

Posted by bianbian on 2007-03-17 07:55


本文Tags: , , ,

实在受不了ADOdb之类的庞大库了,还有网上下的几个库也超级难用,我自己写了一个。只当简单的用,事务之类的我还没有用到,所以没有写进去。感兴趣的可以补充。好像里面的函数有些要php 4.2以上的。
使用示例:

  1. <?php
  2. $db = & new PostgreSQL();
  3. //single record:
  4. $record = & $db->query_first("SELECT * FROM table WHERE id=xxx");
  5. //many lines:
  6. if ($records = & $db->query_all("SELECT * FROM table WHERE id>xxx")) {
  7.     foreach ($records as &$record) {
  8.         ...
  9.     }
  10. }
  11. $db->close();
  12. ?>

类的代码:
Read the rest of this entry »

标签: , , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Technology, php | 1 Comment »

[原]php用UTF-8编码总结

Posted by bianbian on 2007-03-16 06:25


本文Tags: , ,

前几天说的PostgreSQL ERROR原来是php文件没有UTF-8编码导致的问题。
以前说过如果JS文件不是UTF8会在IE有bug,所以JS代码也要用UTF-8。
还有数据库也都要用UTF-8。
php用UTF-8总结:
1) php文件本身必须是UTF-8编码。不像Java会生成class文件,避免这个问题。
2) php要输出头:header(”Content-Type: text/html; charset=UTF-8″);
3) meta标签无所谓,有header所有浏览器就会按header来解析
4) 所有外围都得用UTF8,包括数据库、*.js、*.css(CSS影响倒不大)
5) 最后,php本身不是Unicode的,所有substr之类的函数得改成mb_substr(需要装mbstring扩展);或者用iconv转码(基本上的linux都装了,没装的话download、tar、make、make install,很简单的)
特别郁闷的:
文件系统函数不支持UTF-8!

听说php6已经内置Unicode支持,以后试一下。

标签: , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Technology, php | No Comments »

[原]php版md5,sha-1哪个更快

Posted by bianbian on 2007-03-16 08:01


本文Tags: , ,

一般随机密码都是rand()出来的,我就偷懒直接拿md5,sha-1这些函数来算了:

  1. $s = microtime(true);
  2. for($i = 0; $i < 100000; $i++)
  3.     getRandomPassword();
  4. echo microtime(true) - $s;
  5.  
  6. function getRandomPassword()
  7. {
  8.     ///除去substr和rand的版本:
  9.     //md5(microtime();
  10.     return substr(md5(microtime()), rand(0, 20), 8);
  11. }

经过测试,md5比sha1快(废话 - -):

function with substr and rand only function
md5 1.94637799263 1.79774594307
sha-1 2.12755990028 1.97592806816
标签: , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Technology, php | No Comments »

[原]发现php几个很方便的函数

Posted by bianbian on 2007-03-16 05:03


本文Tags: , ,

确实好久没接触php了,发现自己很落后了。呵呵,其实几年以前我还是php的超级粉丝。
嗯,突然想起大二时用php做过的一个网站:http://www.geohohai.com。这是我第一份Parttime Job,虽然因为客户的需求不是很明确导致我做的很累,不过从和客户谈、合同编写、项目整体规划、项目文档、美工、编码、部署、验收演示整个流程都是自己一个人搞定,我还是很感谢他们给了我这个长足进步的机会的,也是此后靠IT经济自理的正式开端(以前搞家教,真是的:认真备课教的学生反而没进步;随便瞎吹的反而大进步。真是汗颜)。
我又突然怀念起那一个人的浦口暑假,听着梁静茹,啜着咖啡,为了第一份薪水拼命敲键盘,背后是穿过窗帘的夕阳洒下的斑驳。。。。。为什么回忆总是美好的呢?
刚才点过去突然发现几年过去了,他们已经换成asp了。寒,他们又重复开发了一次,不过基本上的美工和系统架构还是我那个:我也是看链接是asp才发现的。架构也基本上是当时我能想出来最先进的了:所有菜单、所有内容都是后台生成的;菜单配置是程序生成JavaScript代码。嗯,又发神经看了一下JS代码,果然这个还在:
/* 本文件由系统产生,请勿更改 Written by http://dzren.com */
说到http://dzren.com,真是遗憾。原来是“东中人”的意思,做的是我高中母校的校友录,是我学网页编程的练习场所。承蒙大家支持和当时年轻气盛,也有兴旺发达的几年零几个月。可惜没有精力维护下去,现在域名都给别人捡走了。留了几百兆的压缩包在我硬盘上(主要是有上传的照片)。每次看到都伤心一番。。。。
。。。。离题了一大通。。。。
php还是在快速开发方面有很大的优势和进步。这次因为项目转别人的ASP+ACCESS到php+PostgreSQL平台,嗯,重温了一下。发现不用写Java的配置文件,还真是爽啊。
嗯,突然不想写了,贴个Example的代码吧(来自Tore Bjlseth),大家都看得明白:

  1. $url1 = "action=search&interest[]=sports&interest[]=music&sort=id";
  2. $str = parse_str($url1, $output);
  3.  
  4. // Modifying criteria:
  5. $output['sort'] = "interest";
  6.  
  7. $url2 = http_build_query($output);
  8.  
  9. echo "<br>url1: ".$url1;
  10. echo "<br>url2: ".$url2;
  11. /*
  12. Results in:
  13. url1: action=search&interest[]=sports&interest[]=music&sort=id
  14. url2: action=search&interest[0]=sports&interest[1]=music&sort=interest
  15.  
  16. (Array indexes are automatically created.)
  17. */
标签: , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Technology, php | 2 Comments »

[原]php使用PostgreSQL的编码问题

Posted by bianbian on 2007-03-15 02:43


本文Tags: , , ,

php 5.2 PostgreSQL 8.1
数据库是用UTF8编码建的:
./createdb -E UNICODE xxxx
但是用php插入中文数据的时候会报错:
ERROR: invalid byte sequence for encoding “UTF8″ ….

看字面意思,好像是因为数据库是UTF8,而插入的数据不是UTF8导致的错误。到psql终端下:

# \encoding
UTF8
# show client_encoding;
UTF8

前面一个UTF8是数据库的编码,后一个表示客户端数据编码(就是插入数据的编码)。
怎么解决?

本问题已经解决,请参考这里:php用UTF-8编码总结

标签: , , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Database, Technology, php | No Comments »

[呜]可怜的信用卡终于申请下来了

Posted by bianbian on 2007-03-14 12:09


本文Tags: ,

申普卡被据了,只好Young卡了。。。5555。。。
申请卡名 申请卡别 收件日期 申请进度情况
Young卡
(VISA 普卡) 主卡 2007-03-02 恭喜您,您申请的信用卡已被批准,很快您会收到我们为您寄发的卡片。

标签: ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Not IT | No Comments »

[原]用pgAdmin建表的时候一定不要大写

Posted by bianbian on 2007-03-12 05:35


本文Tags: ,

想为了省事,没装PowerDesign,直接用了pgAdmin设计表。
我K,被它害死了:每个表每个字段有大写的都用了引号引起来。。。
导致的后果就是:拼SQL语句的时候必须也加上引号,不然每次都
ERROR:relocation [TableName] does not exist…..

于是简单的“insert into Table(Column1,Column2)...”必须写成“insert into "Table"("Column1", "Column2")....”

我说,还不如重新建表吧。。。K pgAdmin它大爷。。。。

标签: ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Database, Technology | No Comments »

[哈]蛮搞笑的嘛。。。

Posted by bianbian on 2007-03-10 08:40


本文Tags:

*嘘嘘 20:12:31
便便吃了么?我吃完了,,,

标签:

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Not IT, bianbian & xuxu | No Comments »

[原].NET反编译工具Reflector

Posted by bianbian on 2007-03-07 10:59


本文Tags: ,

其实.NET的dll和Java的class文件是类似的,果然也有对应的“反编译”工具:Reflector
真的很好用,我谢谢它了!
到Reflector官方网站(http://www.aisto.com/roeder/dotnet/)下载最新版本下载后
(要填姓名、单位和email,姓名要中间空一格,比如“bianbian xuxu”)
解压缩会有一个Reflector.exe直接就可以运行,界面如下:
.NET反编译工具
打开一个.NET的库DLL,直接点方法就可以看源码了。。。。
这里是它的一些插件:
http://www.codeplex.com/reflectoraddins
其中我就用了FileDisassembler,功能就是将所有dll反编译的源码导出来。

标签: ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in C#, Technology | 1 Comment »