小结一下最近碰到的一些应该注意的地方(PHP)

1, UTF-8编码

UCS 字符 U+0000 到 U+007F (ASCII) 被编码为字节 0x00 到 0x7F (ASCII 兼容). 这意味着只包含 7 位 ASCII 字符的文件在 ASCII 和 UTF-8 两种编码方式下是一样的.  
所有 >U+007F 的 UCS 字符被编码为一个多个字节的串, 每个字节都有标记位集. 因此, ASCII 字节 (0x00-0x7F) 不可能作为任何其他字符的一部分.  
表示非 ASCII 字符的多字节串的第一个字节总是在 0xC0 到 0xFD 的范围里, 并指出这个字符包含多少个字节. 多字节串的其余字节都在 0x80 到 0xBF 范围里. 这使得重新同步非常容易, 并使编码无国界, 且很少受丢失字节的影响.  
可以编入所有可能的 231个 UCS 代码  
UTF-8 编码字符理论上可以最多到 6 个字节长, 然而 16 位 BMP 字符最多只用到 3 字节长.  
Bigendian UCS-4 字节串的排列顺序是预定的.  
字节 0xFE 和 0xFF 在 UTF-8 编码中从未用到.  
下列字节串用来表示一个字符. 用到哪个串取决于该字符在 Unicode 中的序号. 


U-00000000 - U-0000007F: 0xxxxxxx  
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx  
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx  
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx  
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx  
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx  

xxx 的位置由字符编码数的二进制表示的位填入. 越靠右的 x 具有越少的特殊意义. 只用最短的那个足够表达一个字符编码数的多字节串. 注意在多字节串中, 第一个字节的开头"1"的数目就是整个串中字节的数目. 


2,UTF-8下匹配汉字

/^[/u4e00-/u9fa5]+$/

在javascript中用这样的上面这个正则就可以匹配中文字符串,但是直接用到php中:preg_match("/^[/u4e00-/u9fa5]+$/",$str),就会产生一个warning。有前人给出的正确的匹配表达式为:

/^[/x{4e00}-/x{9fa5}]+$/u


3,num_format函数返回的是一个字符串,而不是一个整数。

4,PHP中单引号和双引号的区别

单引号不会对引号内的变量进行替换,也不会对反斜杠进行相应的转义,而双引号则会。当然单引号的处理效率也比较好,所以可以使用单引号的地方还是应该使用单引号。

5,empty() 只检测变量,检测任何非变量的东西都将导致解析错误。换句话说,后边的语句将不会起作用: empty(addslashes($name))

6,header函数:

location和“:”号间不能有空格,否则会出错。
在用header前不能有任何的输出。
header后的PHP代码还会被执行。

7,session:

    Session ID在SESSION应用中的作用尤其重要,它一般通过cookie和URL传递,默认通过前者传递,在客户端关闭cookie的情况下通过URL传递。
    另外可以通过文件及数据库、隐藏表单等传递。
    将php.ini中的session.use_trans_sid = 0改为1即可自动通过URL传递。手动通过URL传递的方法是在上一页面链接中通过URL将session_id()的值传到下一页,然后在下一页的session_start()前加入session_id(var)(var即为上一页传过来的session id).,但都会在地址栏中出现类似?PHPSESSIONID=******,存在不安全隐患。
    通过文件、数据库、隐藏表单等方式传递的方法与URL手动传递的思想类似。
    理论上讲,通过cookie传递session id是PHP自动处理的,不需要加入代码控制。但本人在windows下用PHP4.3.4和apache 2.0.49环境多次测试,发现通过cookie无法传递, 即SESSION无法通过cookie配合使用(例如设置session.use_only_cookies = 1后无法使用SESSION),不知是何原因。
    session是服务器本身在服务端产生的一个变量或变量集合,通常session是存储在硬盘上的一个地方,也可能在内存里,session的作用是让用户在不连续的http访问中产生连贯性。因为http协议本身的缺陷,客户端发送到服务器的每次请求都是独立的,没有关联的,session就是这样一个机制,当用户获得一个session变量的时候,服务器交给用户一个令牌,让用户每次跟服务器通讯的时候都带上这个牌子,好让服务器追踪用户的行为,同时,也记住用户的一些个人设置,提供一些个性化的东西。很多地方session被用来处理用户登录,因为当用户退出系统的时候,服务器将删除这个用户的临时profile,下次用户再拿令牌过来,服务器就会拒绝了。这个客户端的令牌,一般是拿cookie实现的,但是这个cookie和普通的cookie不同,他不记录用户操作所产生的变量,比如姓名,email等等,而是记录的服务器上临时profile的一个编号,所以session里面所记录的东西都是放在服务器上的,客户端的信息不会泄露资料。这个session-cookie的作用就是为了和服务器上的资料对上号。这个session-cookie的编号是临时随机产生的,而且编号的离散性很强,就保证了别的客户端无法猜测个编号去窃取别人的信息。再有,由于session的生命周期很短,也就使得通过破解session编号去窃取别人的信息变得没有意义。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值