php中GET/POST方法+号等特殊字符处理

自己在项目开发中写了个自用接口,用GET方法传参(用户名和密码)。最近收到用户反馈:密码为特殊字符时会出错。我一开始想是不是php的mysql_real_escape_string函数将特殊字符转义了,但用户说自己密码只有“+”号这个特殊字符,而“+”号不属于该函数转义的范围之内。

为了弄明白这个问题我就在本地测试了一下,果然发现有bug。

测试代码:

测试的url为http://localhost/test/?a=123!@#&b=123结果报错了:

#号后面的参数被屏蔽了

可以看出“#”号后面的参数被屏蔽了,这很正常,因为“#”号后面的数据不会发送到HTTP请求中。 Continue Reading…

php中require和include的区别之我见

require和include在各种编程语言中基本都存在,都是用来引入外部文件,但两者却不易区分。

其实从两个语句的字面意思很容易区别开来。

require有“需求”的含义,意思就是说用require引入的文件是必须要引入的,如果找不到这个文件会报一个错误,不能继续执行后面的语句。

include有“包括”的含义,意思就是用include引入的文件只是简单包括,如果找不到这个文件只会产生一个警告信息,还是会继续执行后面的语句。

基于这点区别,两者的应用场景就很清楚了。如果你引入的文件是必须的则建议用require。使用include的话,若此文件不存在,虽然后面的语句会继续执行但因为缺少必要组件还是会报错,而且可能会出现一些莫名其妙、不可预料的错误。

关于require和include的却别我认为搞清楚这一点就可以了,其它的一些细微差别没必要去彻底弄清楚。把精力过多的放在这些地方有点本末倒置。

还有一个就是require/include和(require/include)_once间的区别,加不加”_once”唯一的区别就是如果该文件中已经被包含过,则不会再次包含。如同此语句名字(_once)暗示的那样,只会包含一次。如果包含两次,PHP 5 会发出致命错误因为函数已经被定义,但是 PHP 4 不会对在 return 之后定义的函数报错。

那是不是就推荐使用(require/include)_once呢?其实不然,检查一个文件是否已经被包含是需要一个过程的,会消耗系统资源,使用require/include效率更高。还有一个原因,使用(require/include)_once说明你对自己的代码不熟,没信心。而当一个项目需要大量使用(require/include)_once来保证不出错的话,说明这个项目的代码已经非常脆弱了,可能其它一点小错误就会造成整个系统的崩溃。

参考资料:风雪之隅《再一次, 不要使用(include/require)_once》

一个典型的汇编程序

在进入大学之前知道计科院的会学一些编程语言,诸如C语言、C++之类。没想到到了大二居然学了一门叫汇编语言的课程。越学越发现汇编语言真是操蛋,什么寄存器呀,存储器呀乱七八糟的一大堆,搞个基本的a+b都那么麻烦。完全没有C语言那么好用。

然而存在即合理,汇编语言存在至今自然有它的用处。汇编语言最大的特点是直接和底层的硬件相关,能针对不同的硬件编程,且执行效率高。用于无法使用高级语言进行编程的地方,如电饭锅的温控程序。汇编语言还能写操作系统的内核,反汇编别人的程序。当然还有考试要用。

考试过后闲来无事写了个简单的、典型的汇编程序。其中包括基本指令、分支和循环、数组、过程(使用堆栈传递参数)、宏等。包括了大部分的知识点和考点。程序是用来求5个数中最大的数。 Continue Reading…

如何将代码插入到word中

在一般的时候word和代码没什么关系,word也不可以用来编辑代码(貌似也没哪个人用word写代码)。但在有的时候需要在word中插入代码。比如说你写实验报告的时候,老师要求将代码插入进去。一般也就是直接复制进去就好了,然而作为一个完美主义者是不能忍受这种粗暴的方式的。

那样怎么保证代码的高亮和缩进风格呢?就要用到一个神奇notepad++。 Continue Reading…