浏览 5609 次
锁定老帖子 主题:php中字符处理注意的问题(1)
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-22
最后修改:2008-12-22
$zero = "0"; $za = array("00"); if(in_array($zero, $za, true)){ echo 'in'; }else{ echo 'not in'; } 这段代码应该输出什么?答案是in,而不是not in。 然后测试一下这个: $zero = "0"; $za = array("00"); if("0" == "00"){ echo '0 == 00'; } 返回'0'=='00'。 所以以后要注意:对于字符串不是说in,就表示那个字符在array里面。 2. strtolower()函数 我在这里谈过:http://www.iteye.com/topic/297460,我的解决方式是: urldecode(strtolower(urlendoce($str))); 3. trim() 如果面对的是英文字符,那么trim()应该就满足了,但是对于中文字符,就应该重写以trim掉全角的空格: function cntrim($value){ return trim(ereg_replace("^( )*|( )*$","", $value)); } 4. empty(): 这个就有点像上面那个in_array()了,如果你要判断一个textarea里面是否有值,不能光使用empty,因为'0'字符串也会返回empty(但奇怪的是'00'就不会返回empty),重写以应对这种情况: function non_szero_empty($value){ return empty($value) && $value != '0'; } 5. htmlentities(): 与strtolower()类似,htmlentities也会出现一些转义gbk字符的问题,以致出现乱码。索性这样替换: function _myhtmlentities($value){ //$value = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4})|[a-zA-Z][a-z0-9]{2,5});)/', '&\\1', str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $value)); $value = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $value); return $value; } 不过现在还在疑惑为什么htmlentities会出现乱码,这样改为什么又可行。计划有时间看源代码一探究竟。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-07-20
cntrim这个函数还是有问题,换成这个:
function cntrim($str){ return preg_replace('/^(\s| )*|(\s| )*$/', '', $str); } htmlentities有问题,要换成htmlspecialchars()就没问题了 |
|
返回顶楼 | |
发表时间:2009-07-21
最后修改:2009-07-21
strtoupper乱码,应该是用setlocal设置才对,你打错了。,如果函数返回false,原因:1.环境不支持 2.类型名无效 3.值无效
而htmlentities乱码,试下设置第三个参数,函数本身支持编码设置的.. |
|
返回顶楼 | |
发表时间:2009-07-21
最后修改:2009-07-21
$zero = "0"; $za = array("00"); if(in_array($zero, $za, true)){ echo 'in'; }else{ echo 'not in'; } 楼主什么php版本? 我这儿输出结果是 not in ! php v4.39, centos4.7 |
|
返回顶楼 | |
发表时间:2009-07-21
willko 写道 而htmlentities乱码,试下设置第三个参数,函数本身支持编码设置的.. htmlentities $charset支持gb2312/big5/utf-8参数,但不支持GBK参数. 不知道用gb2312参数是否可以当gbk使用。 |
|
返回顶楼 | |
发表时间:2009-07-21
mark35 写道 willko 写道 而htmlentities乱码,试下设置第三个参数,函数本身支持编码设置的.. htmlentities $charset支持gb2312/big5/utf-8参数,但不支持GBK参数. 不知道用gb2312参数是否可以当gbk使用。 不行的gbk是gb2312的超集,可以先用iconv转换。。 |
|
返回顶楼 | |
发表时间:2009-07-22
mark35 写道 $zero = "0"; $za = array("00"); if(in_array($zero, $za, true)){ echo 'in'; }else{ echo 'not in'; } 楼主什么php版本? 我这儿输出结果是 not in ! php v4.39, centos4.7 肯定是not in了. |
|
返回顶楼 | |
发表时间:2009-07-22
zwws 写道 mark35 写道 $zero = "0"; $za = array("00"); if(in_array($zero, $za, true)){ echo 'in'; }else{ echo 'not in'; } 楼主什么php版本? 我这儿输出结果是 not in ! php v4.39, centos4.7 肯定是not in了. php5.0测试过, not in |
|
返回顶楼 | |
发表时间:2009-07-25
可能跟版本有关系吧,我当时测试确实发现这个问题
|
|
返回顶楼 | |
发表时间:2009-08-18
那个 in_array 的,我的结果也是 not in
我是 php 5.2.4 的 |
|
返回顶楼 | |