一:函数简介
cn_substrR,这里的R指的是REQUEST,为什么我们有了gbk和utf8函数截取,这里又多了一个cn_substrR呢?终其原因,它是为了防止黑客的注入而使用的!因为有时候我们在面对一大段内容时,比如新闻简介,里边可能包含一些特殊字符,我们有了这款函数的目的就是要用 stripslashes 过滤掉一些特殊字符,再用 addslashes 再转义回来。再至于有些小朋友认为 stripslashes 和 addslashes 是做什么的?请看这两篇文章来了解 http://www.w3school.com.cn/php/func_string_stripslashes.asp 和 http://www.w3school.com.cn/php/func_string_addslashes.asp 。很明显,它的作用不言而喻!
当然,你的文章如果不开源或者不出名的话,别人也不会拿你的站去注入的。完全用之前两个函数就够了!
演示地址: http://www.ijquery.cn/phpfunction/cn_substrR/demo1.php
下载地址: http://www.ijquery.cn/phpfunction/cn_substrR/cn_substrR.zip
二:函数说明及使用
注意:只有在REQUEST中使用,包括 $_POST 和 $_GET。该函数借助于cn_substr 或者 cn_substr_utf8。所用使用时注意,你一看源代码就懂了。
$name2 = cn_substrR($_REQUEST['fname'], 10);
三:函数源代码
因为我的页面是utf8格式的,所以借用了cn_substr_utf8,如果你的页面是gbk的话,直接使用cn_substr就可以的。
/** * 中文截取2,单字节截取模式 * 如果是request的内容,必须使用这个函数 * * @access public * @param string $str 需要截取的字符串 * @param int $slen 截取的长度 * @param int $startdd 开始标记处 * @return string */ if ( ! function_exists('cn_substrR')) { function cn_substrR($str, $slen, $startdd=0) { $str = cn_substr_utf8(stripslashes($str), $slen, $startdd); return addslashes($str); } } /** * 中文截取2,单字节截取模式 * * @access public * @param string $str 需要截取的字符串 * @param int $slen 截取的长度 * @param int $startdd 开始标记处 * @return string */ if ( ! function_exists('cn_substr')) { function cn_substr($str, $slen, $startdd=0) { $restr = ''; $c = ''; $str_len = strlen($str); if($str_len < $startdd+1) { return ''; } if($str_len < $startdd + $slen || $slen==0) { $slen = $str_len - $startdd; } $enddd = $startdd + $slen - 1; for($i=0;$i<$str_len;$i++) { if($startdd==0) { $restr .= $c; } else if($i > $startdd) { $restr .= $c; } if(ord($str[$i])>0x80) { if($str_len>$i+1) { $c = $str[$i].$str[$i+1]; } $i++; } else { $c = $str[$i]; } if($i >= $enddd) { if(strlen($restr)+strlen($c)>$slen) { break; } else { $restr .= $c; break; } } } return $restr; } } /** * utf-8中文截取,单字节截取模式 * * @access public * @param string $str 需要截取的字符串 * @param int $slen 截取的长度 * @param int $startdd 开始标记处 * @return string */ if ( ! function_exists('cn_substr_utf8')) { function cn_substr_utf8($str, $length, $start=0) { if(strlen($str) < $start+1) { return ''; } preg_match_all("/./su", $str, $ar); $str = ''; $tstr = ''; //为了兼容mysql4.1以下版本,与数据库varchar一致,这里使用按字节截取 for($i=0; isset($ar[0][$i]); $i++) { if(strlen($tstr) < $start) { $tstr .= $ar[0][$i]; } else { if(strlen($str) < $length + strlen($ar[0][$i]) ) { $str .= $ar[0][$i]; } else { break; } } } return $str; } }
四:函数图片