php字符串比较用==的一个教训
一直认为php中字字符串比较直接用==来判断还是很方便的,但今天遇到的一个问题,彻底让我明白了使用strcmp的必要性.这个问题很多老手都可能会忽略的.
今天在登录自己做的程序时,在输入验证码后,想直接按小键盘上回车登录(程序检查了回车事件),结果按回车按成了键盘上回车键旁边小数的那个键,验证码栏就多输入了一个点。由于点很小,我就没注意,再按了一次回车,居然验证码验证成功了。这不见鬼了吗?于是退出再试了一次,多输入一个点,居然的确可以验证通过。果然有问题!但多输2个点,则验证通不过了。
大汗之下,发现是验证用了==。难道字符串==会忽略最后的那个点?
于是做了个实验。
$aa = '3306.';//多个点
$b = '3306';
if($aa == $b) echo "相等哦";
果然得到的结果是相等。
用恒等 === 则 不会得到相等的结论.
用strcmp()也不会得到相等的结论.
于是立刻修正编码规范,禁止使用 == 作为字符串相等比较.改用strcmp();
至于为何 == 会忽略那个点.尚不得知.
相关文档:
configure: error: Unable to find libgd.(a|so)
如果使用的是ubuntu或debian就很简单了,直接sudo apt-get install apache2
libapache2-mod-php5 php5 php5-gd 就基本上搞定,但是用源代码安装还是很麻烦~
wget http://www.boutell.com/gd/http/gd-2.0.11.tar.gz
tar zxvf gd-2.0.11.tar.gz
cd gd-2.0.11
sudo . ......
//计算距公元1年1月1日的天数,$yyyy年分,$mm月份,$dd日
function datelocal($yyyy,$mm,$dd){
$monthdays = array(31,28,31,30,31,30,31,31,30,31,30,31); //非闰年的月份天数
//判断是否为闰年,闰年$leapyear = 1,否则 $leapyear = 0
if($yy%4==0 && $yyyy%100!=0 || $yyyy%400==0)
$leapyear = 1;
els ......
<?php
if($_POST['str'])
{
header('Content-type: application/doc');
header('Content-Disposition: attachment; filename="downloaded.doc"');
echo iconv("UTF-8","GB2312",$_POST['str']);
}
?>
<a href="javascript:void(0)" onclick="downword()">下载</a>
<div id="word" style="dis ......
最近想安装PEAR(PHP Extension and Application Repository),但是在执行批处理文件go-pear.bat的时候出现了错误:
phar "C:\php\PEAR\go-pear.phar" does not have a signature
PHP Warning: require_once(phar://go-pear.phar/index.php): failed to open stream: phar error: ......
htmlspecialchars()
函数把一些预定义的字符转换为 HTML 实体。
ENT_COMPAT - 默认。仅编码双引号。
eg:" (双引号) 成为 "
implode()
函数把
数组元素组合为一个字 ......