PHP的strpos()函数导致程序执行不正常解决一例

王志勇 发表于 2009年02月01日 21:02

在注册程序,或者留言程序中,判别用户发送的数据中是否有非法的关键词,可以用strpos()函数。用法是strpos("abc", "b"),运行的结果是1。如果是strpos("abc", "a"),运行的结果是0;如果是strpos("abc", "d"),运行的结果是空。如下程序:

if (strpos($ga, $gb)!=0) {} 或者省略为
if (strpos($ga, $gb)) {}

大括号里,是根据数据中是否有关键词,来决定是否要执行的程序。我做了一下测试,这里的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)) {}。这样一来,当运行结果为空的时候,结果仍然是空。不再是被判为同一种情况,问题解决。

5条评论:
1   stefyang 2009-02-01 22:04
if (strpos($ga, $gb)!==false)
2   自由勇 2009-02-01 22:07
谢谢指正。:)
3   stefyang 2009-02-03 09:33
共同进步哈
4   烂柯之聊 2009-02-03 11:57
牛年你最牛!
5   自由勇 2009-02-15 11:45
Trackback来自 《2点更正

感谢剪子兄和他的同事,以及一楼的stefyang朋友的指正。

发表评论:
名字: (*必填)
博客: (可省)

正文:

  记住信息?

直接发送Trackback到此文章

说明:本评论系统不支持HTML代码。(您的留言需要审核,审核规则请见这里。)

王志勇:1980-09-26 (38周岁)
程序设计,前端设计。

版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。

与此相关的链接
自由勇专栏

Blog存档 Archives

2018年11月
2018年10月(30)
2018年09月(17)
2016年-2017年(9)
2014年06月-09月(10)
2013年 +

2012年 +
2011年 +
2010年 +
2009年 +
2008年 +
2007年 +
2006年 +
2005年09月(4)

Copyright © 2006-2018 auiou.com All rights reserved.
此Blog程序由王志勇编写 已经发布在Arsue