ctype:php的高效字符串校验,PHP安全检查

ctype是PHP的一个外部扩展库,它提供一个非常迅速的机制,专门针对字符串内容的校验功能。

PHP从4.0.4开始支持该函数,从4.2.0开始内置该扩展库,新安装的PHP程序默认开启该函数库。虽然各版本之间有一定区别,到5.1以后基本稳定,功能也更合理化。

首先看一个应用ctype扩展的例子:


<?php
if (!ctype_alnum($_GET['login'])) {
echo "输入项必须为英文字符或数字0-9。";
}

if (!ctype_alpha($_GET['captcha'])) {
echo "输入项必须为英文字符(大小写均可)";
}

if (!ctype_xdigit($_GET['color'])) {
echo "输入项必须填写一个16进制数字。";
}
?>

下面列出ctype函数库的所有函数(字符串中每个字符都符合后面条件返回TRUE,任意一个不符合将返回FALSE)

  • ctype_alnum — 大小写英文字母或十进制阿拉伯数字
  • ctype_alpha —大小写英文字母
  • ctype_cntrl —控制符 ,”n”、”r”、”t”之类的
  • ctype_digit — 十进制阿拉伯数字,带小数点的字符串也将返回FALSE
  • ctype_graph — 除空格外的任意可打印字符
  • ctype_lower — 小写英文字母
  • ctype_print — 除空格外的任意可打印字符
  • ctype_punct — 匹配标点符号(有空格、字母、数字、控制字符都会返回FALSE)
  • ctype_space — 所有空字符,包括空格、换行符、换页符、回车、制表符(tab)、垂直制表符(vertical tab)等
  • ctype_upper —小写英文字母
  • ctype_xdigit — 十六进制字符 包括(1-10,A-F)

注意:如果我们要验证是字符串是空字符串(即 ”),在PHP5.1之前的版本上述函数很可能返回TRUE,所以在用ctype前需要先检查下字符串是否为空。在PHP5.1之后的版本已经解决该问题,空字符将全部返回FALSE;


( ! ) Warning: Missing argument 1 for cwppos_show_review(), called in /data/www/enjoyphp/wp-content/themes/flat/content-single.php on line 29 and defined in /data/www/enjoyphp/wp-content/plugins/wp-product-review/includes/legacy.php on line 18
Call Stack
#TimeMemoryFunctionLocation
10.0000355192{main}( ).../index.php:0
20.0000355480require( '/data/www/enjoyphp/wp-blog-header.php' ).../index.php:17
30.162910170672require_once( '/data/www/enjoyphp/wp-includes/template-loader.php' ).../wp-blog-header.php:19
40.164110241816include( '/data/www/enjoyphp/wp-content/themes/flat/single.php' ).../template-loader.php:74
50.245710809176get_template_part( ).../single.php:5
60.245810809696locate_template( ).../general-template.php:167
70.245810809792load_template( ).../template.php:643
80.245810810176require( '/data/www/enjoyphp/wp-content/themes/flat/content-single.php' ).../template.php:686
90.251910795272cwppos_show_review( ).../content-single.php:29

发表评论

电子邮件地址不会被公开。 必填项已用*标注