|
与此相关的链接
和平海底2 | Auciou | 自由勇专栏
公益:UFO问答与2012年升华
郝相国先生外星人接触官方网站
呼叫星际联邦/祈祷/许愿
我们看不见外星人的原因
郝相国先生与外星人接触进展(6)
郝相国先生与外星人接触进展(5)
Blog存档 Archives
2010年05月(4)
2010年01月(7)
2009年12月(10)
2009年11月(4)
2009年10月(8)
2009年09月(24)
2009年08月(20)
2009年07月(6)
2009年06月(11)
2009年05月(16)
2009年04月(20)
2009年03月(29)
2009年02月(18)
2009年01月(15)
2008年12月(17)
2008年11月(10)
2008年10月(13)
2008年09月(8)
2008年08月(4)
2008年07月(5)
2008年06月(9)
2008年05月(12)
2008年04月(15)
2008年03月(26)
2008年02月(22)
2008年01月(29)
2007年12月(30)
2007年11月(28)
2007年10月(30)
2007年09月(8)
2007年08月(8)
2007年07月(21)
2007年06月(23)
2007年05月(31)
2007年04月(34)
2007年03月(29)
2007年02月(18)
2007年01月(41)
2006年12月(23)
2006年11月(10)
2006年10月(10)
2006年09月(29)
2006年08月(33)
2006年07月(17)
2006年06月(30)
2006年05月(4)
2006年01月(3)
2005年09月(4)
| 分类文档:编程 87篇: |
去掉UTF-8文件的BOM的方法 2009年03月25日 10:56 EmEditor软件,先打开任意一个PHP文件,按Alt+回车,选择“文件”的标签,在“打开时的字符码”,选择“UTF-8”,然后关闭EmEditor。以后打开任何PHP文件,只要按Ctrl+S,或者Ctrl+E,就可以保存为UTF-8编码的无BOM文件,十分方便。 UltraEdit可以点击“文件→另存为”,格式选择“UTF-8无BOM”,英文网页每次都需要这个操作。否则,在按Ctrl+S时,会被保存为ANSI格式。中文网页,在第一次另存为之后,以后只要按Ctrl+S即可。 EmEditor也可以用同样的方法,“文件→另存为”,字符码选择“UTF-8”,去掉“加入 Unicode 署名”前面的勾,英文网页每次都需要这个操作。同样,中文网页,在第一次另存为之后,以后只要按Ctrl+S即可。EmEditor建议按照第一段文字的方法设置,以后无需每次都使用“另存为”。 2009年03月25日 10:38 实例:http://www.aufor.com/feed/,实际路径:http://www.aufor.com/feed/index.php。创建一个扩展名为.php的文件,在这个.php文件中,开头写入如下这句,PHP文件格式即可转化为XML格式: <?header("Content-type: text/xml; charset=utf-8");?> 然后可以参考别人的RSS文件的编写方式,如果已经可以正常运行,后面的文字无需阅读。RSS文件唯一要注意的是<pubDate>标签,对发布时间的格式有严格要求,否则用户第一次订阅您的RSS时,文章无法按发布时间来排列(发布时间的格式仅对用户第一次订阅RSS时有影响,如果格式不正确也不要紧)。 有的网友问,为什么写入这句仍无效? 2009年03月18日 11:25 例如用户发送的网址是http://www.auiou.com/,将它转化为www.auiou.com,去掉http://,以及最后的/。以PHP为例,可以这样做: <?$url=stripslashes($_POST["url"]); 运行结果: 说明: 2009年03月11日 17:55 3天前有网友问我如何学习PHP,同时也给学习PHP的朋友一点参考。学习编程的方法,就是直接先去做。出现报错,可以查找原因,或在Google和Baidu搜索是否有同样的情况,在测试程序、开发中学习。习惯了,难度并不大。先学习文本数据库、MySQL数据库的写入、读取,这是最核心的部分。对于已经有编程经验的朋友,从原有语言转移到PHP,大约需要1周的时间就可以适应PHP编程。当然,这个时间也因为个人的各种习惯而有差别,不存在聪明与否的原因。在Google搜索“PHP 旧语言的函数”,或者搜索“PHP 要实现的功能或遇到的问题”,就可以找到相应的PHP函数。 没有编程经验的朋友,可以尝试查看别人的程序。事实上,别人的程序是很难读懂的。对于专业的程序员,也是往往很难完全读懂别人的程序,因为一些程序中不容易发现程序员的思路。 思路需要经验,需要灵感,还需要测试。我从2001年开始学习ASP,厚厚的一本书,学了一年,基本上一无所获。2002年~2003年开发留言板和论坛程序,ASP才算学会了。2003年的时候学习PHP,直到2009年,6年的时间,一直没有学会。直到2009年的过年,突然间就学会PHP了。那6年的时间没有学会PHP,很大的原因是我并不那么需要PHP。 不需要精通PHP就可以做项目,一个项目里,用到的知识不到千分之一。在本地建立一个文本文件,把常用的PHP语句、函数,小段的程序,都复制在这里。平时需要用到的时候,从这里复制程序,建立一个自己的“PHP手册”。PHP的开发工具,个人推荐EmEditor,我使用的是2002年的3.28版本。EmEditor的3.28版本,对于PHP编程有十分好的支持,几乎到了完美。EmEditor对于英文的PHP网页中的BOM问题,已经解决。EmEditor最为方便的是查找的时候,相同的关键词会用绿色高亮显示,这个功能对于编程来说是十分重要的。 这儿有个不可思议的体验,很多书都说ASP更简单,PHP的编程难度其实比ASP小一些,PHP更容易一些,功能更强大,有一些程序代码,PHP更简洁。相比较而言,PHP的数组更加方便,PHP的include函数很优秀,可以在include函数中使用变量,直接调用不同的程序文件。 2009年03月11日 10:53 所需软件: 本文的开发环境是WinXP。PHP使用IIS运行,速度很慢。使用Apache运行PHP,速度会相对快很多。MiniApache(2.0.5.2)是一款简化的Apache,只有308K。正如介绍中所说,经常使用的功能并不会少。 经过我很多次的安装和测试,已经比较熟悉这个MiniApache的安装了。为了避免重装系统而重装Apache和PHP,请将它们都安装在D盘上,比如我安装在D:\server。先打造自己的开发环境,安装步骤如: PHPIniDir D:/server/php5 说明:第二行为加载模块,如果没有第三行,PHP无法运行,只显示HTML页。 以后重装系统之后,只要双击D:\server\apache\setup.cmd,选择1,回车,安装,Apache+PHP一步即可完成。 2009年03月02日 00:13 经过大约40天的论坛开发生活,平均每天编程8~10个小时,tgfor即将推出。tgfor是一个封闭的小型社区,您可以自由创建一个小型的论坛(讨论组)。原先的初衷是可以用于朋友圈,以及专门话题的讨论组,或者亲友论坛,家庭论坛(家庭论坛已取消)。目前设定的是论坛新成员加入均需要审核,将来可以根据用户需要来设定论坛是否需要审核新成员。我感兴趣的《一的法则》中文论坛也将会建立,届时网友们将可以在这里谦卑地交流人生的课程。 基本的功能现在已经差不多完成了,目前还剩下删除功能、回收站、邀请码(认证码,无需审核即可加入成员)、短消息等没有完成,近期即将开通网站。论坛的管理模式如前面所提到的,民主,每个论坛默认状态为最多可设置5名管理员,10名版主,10名贵宾,自愿申请,版主和贵宾谦卑和友好地为大家服务。版主和贵宾的管理权限是一样的,可以审核成员的加入,可以解除成员,可以删除违规帖。参与的用户,楼主可以删除回复中的违规帖。 开发日记如:(为安全起见,有一些文件名在这里做了更改) 2009-01-31 2009年02月25日 19:52 分页是程序永恒的主题,2002年的时候我曾经见过一个留言板的分页程序,但是很难读懂。于是我大约在2005年的时候做了一个很大的改进,推算了另一种简单易读的方法,目前我所有的分页程序都是用此方法,这个算法从来没有出过错,无论是ASP、ASP.net、PHP、JSP,还是CGI,都是可以通用的。例如博客或者论坛程序中,以PHP为例,用此程序可以计算出总页数$p、当前页的起始位置$w1的值和结束位置$w2的值,程序如下: <?$pa=$_GET["page"]; //或者省略查询ID名$pa=$_SERVER['QUERY_STRING']; 说明: 分页时,读取多篇博客文章的方法: for ($i=w1; $i<=w2; $i++){} 这是比较简单易读的算法。在搜索程序中,或者打开多段数据库的时候,分页程序就会复杂很多,我曾经连续做了好几天的演算。 2009年02月22日 12:48 如果一个程序有几十行、几百行,如果程序套用3层以上的大括号,检查某个大括号的开始位置,需要花费很多的时间。可以先在本地硬盘制作一个工具,将{替换为{←←!!!,将}替换为!!!→→},如下图: 然后把输出的带有这些特殊符号的程序复制到桌面的一个文件例如5.php,使用文本工具EmEditor打开。然后查找!!!,因为相同的查找关键词EmEditor会用绿色高亮显示,所以查找起来会方便很多,一目了然,如下图: 然后先将内层的大括号从开始到结束部分删除。如下图,先将其选中,然后删除: 最后可以找到,最外层的大括号的开始处是if ($acf)这句。 当然,即使不使用EmEditor的高亮显示查找功能,将{替换为{■←←!!!,将}替换为!!!→→■},使用黑色的方块,会使程序的大括号位置查找起来更加清晰,如下图: 2009年02月15日 22:37 用户发送的表单域中,例如PHP可以使用$_SERVER['HTTP_REFERER']判断post的来源,如果用户是通过本地硬盘的网页,则来源为False。例如编写: $auf=$_SERVER['HTTP_REFERER']; 或者从$auf的值中提取出某些字符串,使其符合一定的条件,再判断用户留言是否写入数据库。为保险起见,也可以再使用一个隐含的表单域<input>,使其为隐含的“验证码”。双重保险,这样可以减少spam。 2009年02月15日 11:26 在我已经知道的范围内,我编写的程序是希望用更简单的方法去实现。虽然已经是比较简便的方法,运行不会出错,在我贴出程序之后,得到了几位朋友的指正,他们的方法更加简便和高效,感谢朋友们的指正!在此做2点更正: PHP的数字在千分位、百万位等增加逗号只要一句程序:number_format($number); 1000以内,不会产生逗号。 PHP的strpos()函数很重要,可以用来实现搜索功能,或者判别一个关键词在某段数据中是否存在等等。如果用strpos()函数来实现此判别的功能,正确的用法应该是使用“全等于”号===,或“不全等于”号!==来判别True或False,例如: if (strpos($ga, $gb)!==false){} 2009年02月11日 09:35 我用过的文本工具主要是EmEditor、EditPlus、UltraEdit这3款,最早不知道这些文本工具的时候我使用记事本,这3款文本工具的功能都比记事本强大、便捷许多。没有一款文本工具是完美的,总是各有各的优点和不足。 EmEditor: 我一直在推荐EmEditor,我也一直使用早期的3.28版本。我大概是从2002年开始使用EmEditor,至今,一直是我的系统必备软件。EmEditor的优点是查找功能十分好,在一个文件里,相同的关键词会用绿色高亮显示,这个功能对于编程来说是十分重要的。EditPlus和UltraEdit均没有相同的关键词高亮显示的功能,在程序里进行查找的时候,我总是需要用到EmEditor。EmEditor 3.28版本没有显示程序的行号,这对我来说并不重要,需要的时候我经常用Ctrl+G来查看行号,它会自动跳到那一行的程序,已经十分习惯了。EditPlus、UltraEdit都有行号显示的功能,我平时较少看左边的行号。每一个回行EmEditor均是用↓表示,在程序里看起来十分方便。 EmEditor和EditPlus的不足是,如果一个网页程序的文件里全部是半角的英文字符,例如英文网页,如果文件是UTF-8编码,去掉了Unicode签名(BOM),使用EmEditor或EditPlus打开,按Ctrl+S直接保存之后文件会变成ANSI编码。必须使用另存为的方式,再选择编码格式为UTF-8,每次都需要这样,很繁琐。EmEditor 3.28版本在另存为的时候,可以去掉Unicode签名,EditPlus 2.11版本不可以去掉Unicode签名。如果一个程序文件是UTF-8编码,当中含有全角字符的话,去掉了Unicode签名(BOM),使用EmEditor或EditPlus直接按Ctrl+S保存,文件格式都是UTF-8编码,都没有问题,同时Unicode签名(BOM)的有无状态也不会改变。因此,不妨尝试将一些完全没有全角字符的英文网页或者include文件文件编码使用ANSI格式,这样不会产生Unicode签名,有全角字符的文件则使用UTF-8编码,并去掉Unicode签名,meta的语言声明仍是UTF-8,不妨一试,很可能不会产生问题。但我还是喜欢meta和文件编码均使用UTF-8,以后不会遇到意外的乱码的问题。 EditPlus: 2003年的时候,剪子兄推荐EditPlus给我。当时我已经很习惯EmEditor,并且EmEditor的功能已经很完美,所以我这几年几乎没有用过EditPlus。EmEditor和EditPlus的共同点是,体积都很小,安装目录只有1兆多,启动很快,一瞬间就可以启动了。 UltraEdit: UltraEdit文本工具的功能很多,安装目录有24兆。制作英文网站,并且是PHP程序的时候,必须用到UltraEdit。因为UltraEdit在保存文件的时候,可以直接保存为没有Unicode签名的UTF-8编码格式。EmEditor每次保存的时候,需要另存为才可以保存为没有BOM的UTF-8编码格式,否则EmEditor直接按Ctrl+S,会保存为ANSI格式。因为当UTF-8文件没有BOM的时候,EmEditor或EditPlus会认为是ANSI格式,以ANSI格式打开文件(当文件中有全角字符,EmEditor或EditPlus均没有这个问题)。UltraEdit比较遗憾的是,不能像EmEditor一样打开多个独立的窗口。 这3款软件里,感觉EmEditor已经很顺手了,使用了约7年的时间。制作英文网页的时候,我使用UltraEdit+EmEditor。使用UltraEdit来编辑,使用EmEditor来查找关键词。 2009年02月09日 14:25 我很喜欢把输出的HTML代码或者文字部分,以直接输出的方式,而不是作为一个字符串使用echo输出。因为当有大片区域的HTML代码的时候,echo的程序写起来比较繁琐,可以简化为<?if (){?>HTML代码<?}?>的形式,这种形式有很大的灵活性,因为在这当中大片区域的HTML代码当中,还可以再包含PHP程序、Javascript等任何代码。例如: <?if ($aa=="2") 可以简化为: <?if ($aa=="2") 如果大片区域的HTML代码较多,PHP可以使用include()函数的方法来节省服务器资源。ASP中也可以用到这种方法来避免大片区域的Response.Write,方法是<%if aa="50" then%>HTML代码<%end if%>,例如: <%if aa="50" then 循环语句也是类似的方法,如<?for (){?>HTML代码或PHP程序<?}?>和<%for i=1 to ac%>HTML代码或ASP程序<%next%>。 2009年02月08日 11:41 UltraEdit是一款功能强大的文本工具,可以用于编程。安装UltraEdit之后,默认的设置没有自动换行。设置的方法是,点击菜单栏的“高级→配置”,找到“编辑器→自动换行/制表符设置”,如下图的左边。然后,把“默认为每个文件启用自动换行”,如下图的画红圈部分,设置完成。 如果按Ctrl+W,只能临时切换,下次再启动UltraEdit,就需要再切换,幸好有“配置”这里能够做设置。另外,UltraEdit最大的优点是打开没有Unicode签名(BOM)的UTF-8格式半角英文文件,仍以UTF-8方式打开,也就是不需要BOM,UltraEdit也能够辨别文件编码。 2009年02月08日 08:35 一点拙见,如有不正确,欢迎指正,谢谢。中文网站使用ANSI(GB2312)编码,是最理想的编码。因为ANSI编码,半角字符占用一个字节,全角字符占用2个字节。Unicode则是无论半角,还是全角,都占用2个字节。UTF-8编码,半角字符占用1个字节,全角字符占用3个字节,如这里做的对比:http://www.auiou.com/relevant/00001188.jsp。 20楼和21楼的朋友说得很好。ANSI编码不支持韩国语字符,在ANSI编码下韩国语字符会转化成한국어的形式(한국어),一个韩国语字符在ANSI编码中需要占用8个字节,而一个韩国语字符在Unicode编码中占用2个字节,在UTF-8编码中占用3个字节。但愿如20楼朋友所说,希望UTF-16能够解决这一问题。 因此,如果是英文网站,因为都是半角字符,所以网页文件使用ANSI编码,或者UTF-8编码,所占用的服务器资源是一样的。然而中文网站使用ANSI(GB2312)编码,显然会比UTF-8节省10%~30%的硬盘和CPU资源,如上述文章的对比,因为有半角和全角混合,所以会产生10%~30%不等的百分比。好比是ANSI编码的汉字文件占用10兆的空间,UTF-8编码的汉字文件则占用15兆的空间,Unicode编码的汉字文件与ANSI编码同样占用10兆的空间。如果字符均是半角的英文,假如UTF-8格式的文本数据库文件总共是10兆,ANSI编码同样是10兆,Unicode编码则是20兆。所以西方人在开发网页的时候,不使用Unicode编码。 中文网站,无论数据库是使用ANSI编码,或者UTF-8编码,或者Unicode编码,当被用户端页面提取的时候,GB2312语言总是会比UTF-8语言更节省资源,从而提高速度。 2009年02月06日 13:36 如果你的网站有一个独立IP(假设是123.23.55.10),服务器无需任何设置,只要在域名管理和网站程序做一下设置。例如要给webshu.com做泛域名解析,方法是,1、在域名管理面板的A记录增加一个*(也就是*.webshu.com),我试了一下,即时生效。如果A记录不能增加*的子域名,则在别名(CNAME)处增加。2、网站程序里,ASP用Request.ServerVariables("server_name")获得地址栏的域名,PHP用$_SERVER['SERVER_NAME']获得地址栏的域名,然后ASP通过replace()或者mid()和Left()函数,PHP通过str_replace()或者substr()或者explode()来获得二级域名第一个“点”前面的值(假设是hhh)。例如访问http://namsa.webshu.com时,hhh的值是namsa。 需要注意的是,因为别名(CNAME)不能直接指向IP地址,可以用任何已经有的域名如wang.auiou.com来解析这个IP地址123.23.55.10,然后添加的别名*对应的地址是wang.auiou.com。 虽然都是解析到同一个服务器,但是因为二级域名不同,二级域名相当于网站的get查询参数的值,也就是前面提到的hhh。这个值相当重要,假设这个值是auiou,我可以在123.23.55.10的服务器上建立或者让程序自动建立一个目录ck/auiou,在每个网页的include文件建立一个变量,让它的值是ck/auiou(ASP程序如"ck/"&hhh,PHP程序如"ck/".$hhh),使ck/auiou这个目录变成当前泛域名的根目录,每个泛域名的根目录相对路径都用这种方法。访问http://namsa.webshu.com就可以直接访问namsa帐号的首页,访问http://auiou.webshu.com就可以直接访问auiou帐号的首页,等等,无任何跳转定向。至此,轻松地实现了完美的泛域名解析,网站服务器无需任何设置和配置。 在本地测试的时候,可以先把wang.auiou.com解析到127.0.0.1的本地IP地址。 用同样的方法,网站可以绑定无数个顶级域名或者子域名,这不是跳转或者框架嵌入,而是真正地“绑定”,只要网站有独立IP。同样,网站服务器无需任何设置和配置。 2009年02月01日 21:02 在注册程序,或者留言程序中,判别用户发送的数据中是否有非法的关键词,可以用strpos()函数。用法是strpos("abc", "b"),运行的结果是1。如果是strpos("abc", "a"),运行的结果是0;如果是strpos("abc", "d"),运行的结果是空。如下程序: if (strpos($ga, $gb)!=0) {} 或者省略为 大括号里,是根据数据中是否有关键词,来决定是否要执行的程序。我做了一下测试,这里的strpos($ga, $gb),$gb是用户发送的数据,$ga是我们设定的关键词。当如strpos("abc", "a")运行结果为0的时候,与strpos("abc", "d")运行结果为空的时候,上述的if判断都列为同一种情况,导致这个判断会产生失误,使大括号的程序不能正常运行。 解决的办法是,让strpos("abc", "a")运行结果为0的时候,使其变为1,方法是strpos("a".$ga, $gb),也就是在变量$ga前面加任意一个字符,if (strpos("a".$ga, $gb)!=0) {} 或者省略为 if (strpos("a".$ga, $gb)) {}。这样一来,当运行结果为空的时候,结果仍然是空。不再是被判为同一种情况,问题解决。 2009年02月01日 01:34 编了6年多的程序。过年的这几天开始正式学习PHP,经过这一个星期的练习,已经初步入门了,比想象中顺利很多,已经可以用PHP编写论坛、博客、网站程序,输出的HTML代码完全保持不变。学习一门新语言最好的方法,就是把以前写过的程序,翻译成这门新语言,绝大多数都有相对应的函数,在Google搜索“PHP 旧语言的函数”,或者搜索“PHP 要实现的功能或遇到的问题”,就可以找到相应的PHP函数。 这几天成功地把我以前写的一些程序,都翻译成了PHP,还用PHP写了一些新的程序。虽然PHP存在着很多的问题,比如substr()和array()等函数不能直接处理中文,不能直接调用中文的文件名,UTF-8编码的网页不能打开Unicode或者ANSI文本数据库,BOM经常会造成报错,等等。但是PHP的函数和数组果然很强大,也容易理解,调用起来也很方便,报错相对较少。如果PHP仅仅用来做英文网页,就不会出现那么多的问题。 因为PHP这几年在国内很流行,建网站还是有很多的便利之处。 2009年01月29日 12:49 PHP的substr()是一个十分重要的函数,可以实现对字符串的处理,例如截取字符串的某部分,如把IP地址220.181.20.58替换为220.181.*.*,需要用到substr()函数。让人郁闷的是,substr()不支持中文,会产生乱码。JavaScript的substr()函数和ASP的Mid()函数,无论是UTF-8还gb2312编码,都可以很好地直接支持中文。 另外如$pep="和平海底"; $auf=$pep[1];,$auf的结果是乱码,而不是“平”。如果使用数组array()函数如:$pep=array("和", "平", "海", "底"); $auf=$pep[1];,$auf的结果是仍然是乱码。 如果substr()或者array()的处理字符是英文或者数字、半角符号,则没有问题。我用PHP4和PHP5测试了一下,都有此问题。在网上搜索了一下,因为PHP把处理的全角字符的字节拆开来处理,ANSI编码拆为2个字节,UTF-8编码拆为3个字节,需要另外一段程序,如“php 截取”。如果大量地使用substr(),再加上另外的这段程序来处理段落的中文字符,在一定程度上大大降低了程序的效率,增加服务器的负担和成本。 PHP的替换函数str_replace(),以及查找字符的位置strpos()函数,则可以很好地直接支持中文全角字符。 2009年01月27日 19:05 程序如: <?$auiou=35080; 运行结果:35,080。 2009年01月26日 07:31 如果已经设计好程序的思路,着手去开发的话,SNS封闭社区的核心程序的开发时间,至少大约需要1个月;BBS社区的核心程序开发,至少1个月;个人博客的核心程序开发,至少10天;多用户博客的核心程序开发,至少1个月。慢则几个月到几年的时间,因为设计程序的思路,需要一定的时间和经验。 程序搭建之后,可以根据需要,逐渐开发一些其它的功能。在很多应用上,比如社区、SNS、博客,有很多人建议使用开源程序,这的确节省了初期的很多开发时间和成本。但是,100%适合自己的程序,基本上是找不到的;其次,修改开源程序、增加新功能是十分困难的,对于专业的程序员来说也是很难实现的,因为需要深入了解程序的结构;第三,有不少开源程序都很占用服务器资源。与其花大的精力了解别人的程序结构,不如自己开发。做开发,则可以对自己的程序了如指掌,修改程序、增加新功能都容易了许多。虽然初期投入了一定的时间和成本,但是后期对于新功能的开发,则灵活、自主了很多,以及与网站的其它数据相连接,都更加便捷。 博客程序、BBS程序,我都已经亲自完成了,2009年我打算着手开发一个微型的SNS程序。 2009年01月04日 20:37 有这几个任务,一直在考虑去实现,只是很需要时间。 我现在阅读一些网页,经常是按Ctrl+D直接收藏,没几天的时间,现在我的收藏夹,就有新的150多个网址了。 EmEditor 3.28和EditPlus 2.11的Bug 2008年11月22日 22:40 我使用的文本工具EmEditor版本是3.28,EditPlus 2.11的版本是v2.11,系统是WinXP SP2和SP3。最近发现它们都有相同的Bug,当一些文本文件中有“英、盈、影、映、莹、楼、搂、漏”等汉字时,整个文件的中文会变为乱码。实际上是当有这些汉字的时候,EmEditor和EditPlus会把原本ANSI格式(GB2312的编码)的文件,以UTF-8的形式打开,所以产生了乱码。用记事本打开文本文件,可以正常显示。 希望其它版本的EmEditor和EditPlus能解决这一Bug。 2008年11月04日 12:54 在做注册程序验证码用户名是否可用、在线上传文件、删除文件、投票程序等不需要刷新网页即可出现结果的程序的时候,可能需要用到Ajax。其原理是JavaScript通过onChange、onClick、onMouseOut等事件取读网页当前的一些用户操作的数据,然后将这个数据传送给一个动态网页进行处理。 但有时候,这个动态网页并不运行。我以前曾遇到这个情况,当时解决了,就是给这个动态网页写入不缓存于客户端的语句。前天再次遇到这个情况,动态页有时运行,有时不运行。昨天试验了很多次,再次解决问题的时候,想起了以前曾遇到过这个情况。 Ajax调用的动态页,应该要让这个动态页不载入客户端的缓存。同理,Blog的Trackback程序,经常无法接收信息,可以尝试在Trackback程序的动态页写入使其不写入缓存的语句。 2008年07月11日 13:02 我的Blog首页目前有73个友情链接,但从未统计过从我的Blog中点击出去的次数,感觉还是有点遗憾。在程序上实现,借助Ajax,已经测试成功了,如这里的方案。实现的效果如下图: 因为需要连接到一组新的数据库,并产生73个变量名,可能会使页面处理的速度稍微慢一点点,也可能感觉不出来。这似乎还不是一个至关重要的应用,所以在性能和应用之间,为了保证更高的性能,还是迟迟没有使用它。 2008年07月05日 11:08 我第一次编写的论坛程序,在2002年10月完成,直到2003年,程序进行了5次大调整,就是后来的Webshu网页论坛。那时候对程序是十分不熟悉、陌生的,效率很低。不管写什么程序,只要有连接数据库的,就感觉像是一个大工程。现在建立数据库,比以前自然轻松了很多,只要规划好就可以了。可见,以前看似很复杂的事,只要熟练了,习惯了,就没那么难了。 2004年~2005年这2年,我几乎没有为自己的网站写任何程序,因为这对我来说是人生职业选择的一个时期,当中也在为职业选择做很多其它的事情。2006年5月,我的Blog程序完成了,“和平海底”Blog开通了。Blog程序与新闻系统、论坛程序,都是一样的,所不同的是Blog程序增加了RSS和Trackback,仅仅是多了这两个功能。 我现在编写的论坛程序,也包括我编写的Blog程序,核心技术的代码大约40行左右。因此,只要熟练运用核心代码,大多数功能都可以实现。由如此简单的核心代码,实现了极其复杂的前台交互和后台的数据处理的功能。程序与代数很相似,需要经常推导公式,多维数组也经常会用到,以及统筹顺序,习惯了就很好理解。编写程序并没有想象中的那么恐怖,它就像写作一样,是一个累加的过程。有极强的连贯性,如果不休息,一口气把一个大型的程序编写完毕需要100小时的话,如果按照正常的休息时间可能就需要2个月完成。因为休息之后,工作状态会大减,对前面所做的一些工作也会遗忘。 我现在编写的这个全新的代码、新版的论坛程序,已经编写了10多天。这几天几乎没有因为编写程序而感到头晕,反而感觉到一种轻松,我也觉得很奇怪。可能有这些原因:1、因为效率比以前提高了很多,程序的方法大多也是运用已经熟练的老方法,创造性的脑力劳动减少了。2、我这台新电脑是3G的赛扬D,速度比以前快了很多,用上去十分顺手和轻松。3、每天都有锻炼身体,体力加强了。以前写Blog思考哲学问题的时候,倒是经常头晕,有时候严重到了一思考十分钟就开始头晕。然后出去走一走,锻炼锻炼身体,头晕只能减缓一些。这可见,思考、学习新问题的时候,大脑皮质在发生变化,人很容易感觉疲劳。反复运用已经熟练的知识、技术和经验,就不那么容易疲劳了。 2008年03月19日 08:33 网站计数器的统计方式有很多种,最常见的是刷新一次即增加一次,或者服务器记录多个用户的IP,在线的用户在一定的时间内刷新,计数器不会增加。我觉得这两种方式相对都比较消耗服务器资源一些,刷新一次即增加一次,服务器总是在频繁写入;记录多个用户的IP,同样也是让服务器频繁地写入。所以在2002年我设计和制作的网站计数器程序,只记录最后一位访问者的IP地址。这样的优点是减少服务器的负担,在线的某位用户刷新网页,计数器不会增加,只有其他的在线用户刷新网页,计数器记录的最后的IP地址才会改变。 但是这样的缺点是,如果总是一位访问者在访问某个网页,这个网页的访问次数总是不会改变,会让统计不准确。现在我设计了一个新的方案并测试成功,在记录最后一位访问者的IP地址的基础之上,再记录最后一位访问者的访问时间。如果IP地址没有改变,可以设定如果这位访问者在2分钟、5分钟或者15分钟、30分钟之后访问时,计数器会增加。当前的时间和最后访问时间做减法,如果差值大于1、大于4、大于14、大于29,或者IP地址不同时,则增加一。这样,可以在一定程度上提高大型网站的性能。 2008年03月15日 18:14 如果只做编程,不做其它事情的话,我现在一天大约可以完成3~8个功能的程序设计和编写,包括大的程序段和小的程序段。这一个多月,每天都是以3~8个功能的这样的进度完成的。每当我把要完成的功能计划出来,然后开始设计、开始去写的时候,很像是长长地吸了一口气,潜入水中。还没有动手写程序的时候,每次总是有些恐惧,因为总觉得可能会有很大的工作量,程序失败的机率也是常常有的,这样不行就经常要换其它的方法和思路。 现在每天大约20~30分钟就可进入最佳工作状态,编程很需要集中注意力。如果注意力不集中的话,可能这项工作会越拖越久,那种感觉可以用恐怖来形容。每天看着“√”越来越多,实现的功能越来越多,心里总是感到一种凉爽。 2008年03月10日 17:20 我现在养成了写工作计划和日记的习惯。我的工作计划和日记主要是写给自己看,所以写起来很简单。一条工作计划或日记可能只有几个字,或者十几个字,或者几十字。在我的程序编写工作中,所有要完成的小细节、想到什么要实现的功能、要修改或增加的程序,就马上记下来,完成之后打勾。 这样写工作计划和日记很轻松,可以很清楚地让自己看到自己的工作状况和生活状况是处于哪一个阶段,能够看到自己的振动频率,减少焦虑。这种方式,很有助于工作的进展。 2008年03月09日 23:07 与大家的Blog一样,我的Blog过去经常收到spam。在没有任何自动过滤、验证码的情况下,每天至少会收到10~30条,甚至更多。有的spam是用ping的方式,post处理程序正好能接收,所以不做过滤的话,一天可能会收到上百条spam。 我编写了几次程序,经过这样的一层一层过滤,已经大大减少了spam:Trackback的地址和评论的action地址用字母和数字混合、临时更改Trackback的文件名、临时更改评论的action地址、网址自动过滤、临时的验证码、自动验证码、自动封闭IP。 自动验证码使用了一个月,效果十分好,这一个月只收到四五条人工spam。这些spam有一个特点,就是留言内容里至少有一个网址,或者是超链接的HTML代码也写在留言内容当中。凡是留言内容中含有网址,则自动出现验证码。很高兴的是,spam发送者都不输入验证码。 spam问题终于彻底解决了。可见,验证码对人工spam十分有效。 2008年03月07日 22:19 这三个星期又完成了几十项功能的程序编写。在我这7年的网页设计、期间有5年的编程工作的这些经历当中,我觉得不少时候,编程反而比网页的页面设计容易。可以做一个比较形象的比喻,编程就好比是几何与代数,设计好比是美术,撰稿好比是写各种学科和专业知识的稿子。编程、设计和撰稿这三者的共同之处是,工作量庞大。 编程容易的方面是,在对数据的处理方面,大多数功能都可以实现出来,因为编程的过程与解几何题、代数题非常类似,只要数学问题可以解决,编程就可以逐步解决,算法更好,程序的效率就会更高,运行速度就会更快。对于编程而言,方法就是所谓的灵感,因此灵感往往来得比较自然。页面设计的灵感则来得很慢,因为页面设计是凭空去想象和创造,完全不知道自己的灵感是处于哪一个时空。我十分注重用户浏览的舒适度、页面设计的时尚风格,我浏览过的平面设计案例超过30万件,但仍然是常常无从下手。所以有时候,我在页面设计方面所需要花的时间,要远远多于编程。当我把更多的精力放在了编程方面,网站有了更多、更好的功能,所以页面浏览的体验也会变得不一样,会有一种更新鲜的感受。
$j=str_replace("/", "", $url);
$i=strlen($url);
if ($i-strlen($j)==3 && substr($url, $i-1)=="/") $url=substr($url, 0, $i-1);
if (strtolower(substr($url, 0, 7))=="http://") $url=substr($url, 7);?>
MiniApache(2.0.5.2版本,不是MiniApache for PHP这一款,因为这一款的PHP是PHP4);
php-5.2.8-Win32.zip。
httpd.conf文件必须写入如下这3行:
LoadModule php5_module D:/server/php5/php5apache2.dll
AddType application/x-httpd-php .php
DirectoryIndex index.html这一行是目录的默认文档,改为DirectoryIndex index.php index.html
固定链接 | 发表评论(10) | Trackback(6)
rightful.php√
2009-02-01
\被替换成\\√
管理后台√
F:\transient\php\post√
Register 验证码√
注册的用户名不能含有特殊字符√
此用户名已存在,请输入其他用户名√
请输入密码√
国家名√
注册新用户√
清除所有的Cookie√
2009-02-08
登录√
登录正常写入Cookie√
判别注册论坛时标题中的关键词√
http://ww2.tgfor.com/account/√
Create a small forum√
用户中心account√
search.php√
用户页面u/√
增加progr.php√
essint.php√
论坛首页√
论坛的欢迎词√
2009-02-14
欢迎词改为第2行√
去掉chr(13)√
验证留言中是否有违规内容√
增加验证码√
2009-02-17
http://ww2.tgfor.com:60/user/register/ Email和Website验证非法词语√
增加欢迎词与验证√
字数改为2000字√
tf/undire.php 写入留言√
http://ww2.tgfor.com:60/group/peace/ aga/oricha.php√
判断留言tf/boonar.php√
论坛翻页√
论坛第二页无法发送√
Post a new topic何时显示√
论坛页面√2
回复帖子√
论坛的关键词回复或者新帖时的验证码√
http://ww2.tgfor.com:60/group/peace/ 跟帖样式表√
修正回复√
修正Reply (3)数√
论坛带#号报错,去掉来源的#号。√
帖子的编号√
2009-02-18
catode1.php√
常用变量名全部变为2位数√
留言页使用<div id=j1>√
回复的页面 10条以后显示√
论坛首页显示更多√
留言禁止HTML√
未发送成功回车符的问题<br>√
第二页回复,跳到第二页√
发帖时,统计网站总数√
发帖时,以及个人统计,论坛统计√
重复发帖改为ID编号与内容相同时,提示为重复发帖√
验证访问权限由Cookies改为目录文件√
注册成功后自动登录√
2009-02-19
右侧导航√
运行目录名称改为commence√
管理员/版主后台http://ww2.tgfor.com:60/commence/manage.php?peace √
bumspr.php√
weavego.php√
管理后台查看新用户√
2009-02-20
natail.php超过1000帖自动改名√
新用户名和主页的查看√
新申请论坛的名称和欢迎词的审核harvestinv.php√
2009-02-21
applyforafellow.php autur.php 防止重复提交√
申请加入论坛后台提示列表 exceptionalpri.php√
2009-02-22
approveafellow.php 审核会员加入√
总管理员可以参与管理√
2009-02-25
http://ww2.tgfor.com:60/commence/apply.php?peace&administrator 检验重复帖√
apply.php√
symbolbum.php√
http://ww2.tgfor.com:60/commence/approvenewfellows.php?beliefin2012√
在管理后台建立相应的数据库,使其显示审批的记录√
申请加入的重复帖√
注册用户时,防止重新提交√
论坛审核用户√
申请加入论坛√
创建论坛时,防止重复提交√
approveafellow.php防止重复审核√
清除approveafellow.php的统计数√
防止加入申请重复发送√
2009-02-26
已经有此权限,无须申请的提示√
论坛/gloh/用户的留言数 统计有误√
approveamanager.php 审核管理员√
申请管理员时,人数已满的提示√
去掉家庭论坛√
审核管理员时,人数已满,无法审核√
审核管理员时,已经审核,提示√
新会员加入,在管理员后台显示√
申请管理员,后台提示√
2009-02-27
邀请一名管理员√
管理员人数已满不能增加,如果可以,增加√
rescindamanager.php?peace&administrator 解除后数量减1。√
解除一名管理员√
inviteafellow.php√
解除会员√
如果成员有权限,不能解除会员。√
拒绝加入时,wattc.php同样减1√
统计管理员数量√
在线审核时,无法编辑资料√
Forum profile√
cacia.php 修改欢迎词√
2009-02-28
修改标题√
不能解除比自己级别高或者同级别的管理人员√
修改论坛的名称单独审核$nico="&saco=muli&earn=name";√
修改欢迎词单独审核$nico="&saco=mul&earn=salutatory";√
修改论坛的名称和欢迎词的审核√
语言设置√
注册论坛后跳转的页面√
申请/审核版主和贵宾√
审核增加欢迎词√
避免rescindafellow.php?<?=$gn?>的形式√
Links of forums√
Links on the front page√
b/pulgene.php√
每个论坛的友情链接√
去掉右侧的管理员列表登录后才可以看到√
更改名称时,删除/添加列表√
合并t/g/ adm2.php approveamanager.php√ adm3.php inviteamanager.php√ adm4.php rescindamanager.php adm.php apply.php√ admi.php approvemanagers.php√
自助审核版主√
2009-03-01
语言设置√
http://ww2.tgfor.com:60/commence/approvenewfellows.php?peace√
quwidth.php√
中文版√
中文版的target odeli.php√ group.php √
首页√
中文版申请新用户
if ($pa) $pa=1;
$w3=10;
$w4=$auf/$w3;
$w5=floor($w4);
$p=$w5+1;
if ($w5==$w4) $p=$w5;
if (!$p) $p=1;
$w1=($pa-1)*$w3+1;
$w2=$w3+$w1-1;
if ($w2>$auf) $w2=$auf;?>



if ($auf){
// 用户留言写入数据库
}
感谢Saturn朋友指出更简便的方法。
例如:
$auf=35080;
$pep=number_format($auf);
$pep的值是35,080。
感谢剪子兄和他的同事,以及一楼的stefyang朋友的指正。
if (strpos($ga, $gb)===false){}
if (strpos($ga, $gb)===True){}
{echo "abcd……(大片区域的HTML代码)".$tg;
$iou=20;}
else
{echo "1234567890……(大片区域的HTML代码)".$tg;
$iou=25;}?>
{?>abcd……(大片区域的HTML代码)<?=$tg?>
<?$iou=20;}
else{?>1234567890……(大片区域的HTML代码)<?=$tg?><?$iou=25?><?}?>
iou=20%>大片区域的HTML代码<%=tg%><%end if%>
if (strpos($ga, $gb)) {}
$pep=number_format($auiou, 3, "", ",");
$pep=substr($pep, 0, (strlen($pep)-4));
echo $pep;?>
固定链接 | 发表评论(11) | Trackback(0)
固定链接 | 发表评论(24) | Trackback(0)
固定链接 | 发表评论(12) | Trackback(0)
最新的评论 Comments:
» QQ群需要黑名单功能
» 祝大家五一快乐
» QQ2010的年龄资料
» 有可能是这样
» 严肃地了解2012
» ANSI和UTF-8文
» 日记:2010-01-
» 为什么写Blog
近期的主题:
有可能是这样
QQ2010的年龄资料很不方便
QQ群需要黑名单功能
祝大家五一快乐
严肃地了解2012
日记:2010-01-17
祈祷website存活
获知真相
日记:2010-01-04
制作了新的博客风格
感受30岁的第1天
日记:2009-12-30
“蛇娃”的病是有希望治愈的
悲剧的原因
为他们的贝岸工作说句公道话
年底的感言
金山词霸与美式英语
有关斜视治疗的研究讨论
感动,回味中……
2个网站挂了
恭喜新博客开通!
快完成了
显卡与显示器“不兼容”偏色解决一例
寻1987年出生,我的被拐走的弟弟王志生(左手通观手,即断掌)
最近
网页中的路径/
循环程序的写法与速度对比
博客防spam/陌生人恶意留言另一方案
二级域名的博客在本地建立虚拟主机
重新编写了Trackback程序
Apache实现多域名解析同一空间简法
Apache在本地建立泛域名虚拟主机简法
使用Apache作为本地虚拟主机预览博客
ixwebhosting更换了服务器
博客+论坛的方式
如何关闭ixwebhosting的访问日志
一张原理图的绘制过程
祝我29周岁生日快乐
Photoshop,CorelDRAW,Word的选用
|