字符串截取,支持中文和其他编码 ~~~ /** +---------------------------------------------------------- * 字符串截取,支持中文和其他编码 +---------------------------------------------------------- * @static * @access public +---------------------------------------------------------- * @param string $str 需要转换的字符串 * @param string $start 开始位置 * @param string $length 截取长度 * @param string $charset 编码格式 * @param string $suffix 截断显示字符 +---------------------------------------------------------- * @return string +---------------------------------------------------------- */ public static function msubstr($str, $start = 0, $length, $charset = "utf-8", $suffix = true) { if (function_exists("mb_substr")) return mb_substr($str, $start, $length, $charset); elseif (function_exists('iconv_substr')) { return iconv_substr($str, $start, $length, $charset); } $re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/"; $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/"; $re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/"; $re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/"; preg_match_all($re[$charset], $str, $match); $slice = join("", array_slice($match[0], $start, $length)); if ($suffix) return $slice . "…"; return $slice; } ~~~ 获取当前页面完整URL地址 ~~~ /** * 获取当前页面完整URL地址 */ public static function get_url() { $sys_protocal = isset ( $_SERVER ['SERVER_PORT'] ) && $_SERVER ['SERVER_PORT'] == '443' ? 'https://' : 'http://'; $php_self = $_SERVER ['PHP_SELF'] ? NetUtil::safe_replace ( $_SERVER ['PHP_SELF'] ) : NetUtil::safe_replace ( $_SERVER ['SCRIPT_NAME'] ); $path_info = isset ( $_SERVER ['PATH_INFO'] ) ? NetUtil::safe_replace ( $_SERVER ['PATH_INFO'] ) : ''; $relate_url = isset ( $_SERVER ['REQUEST_URI'] ) ? NetUtil::safe_replace ( $_SERVER ['REQUEST_URI'] ) : $php_self . (isset ( $_SERVER ['QUERY_STRING'] ) ? '?' . NetUtil::safe_replace ( $_SERVER ['QUERY_STRING'] ) : $path_info); return $sys_protocal . (isset ( $_SERVER ['HTTP_HOST'] ) ? $_SERVER ['HTTP_HOST'] : '') . $relate_url; } ~~~ 根据链接地址获取域名 ~~~ public static function getRootDomain($url) { $ohurl = $ohip = array (); $url = $url . "/"; preg_match ( "/((\w*):\/\/)?\w*\.?([\w|-]*\.(com.cn|net.cn|gov.cn|org.cn|com|net|cn|org|asia|tel|mobi|me|tv|biz|cc|name|info))\//i", $url, $ohurl ); if (! isset ( $ohurl [3] ) || $ohurl [3] == '') { preg_match ( "/((\d+\.){3}\d+)\//", $url, $ohip ); return isset ( $ohip [1] ) ? $ohip [1] : ''; } return $ohurl [3]; } ~~~ 去除空格 ~~~ /** * 去除空格 * @param arr string $arr 数组或者字符串 * @param boolean $way 去除空格的方式 0或者null 去除前后空格 1 去除所有空格 */ public function trimarr($arr, $way='') { static $list = []; $qian=array(" "," ","\t","\n","\r"); $hou=array("","","","",""); if(is_array($arr)){ foreach($arr as $key=>$val){ $list[$key] =$way ? trim($val) : str_replace($qian,$hou,$val); } }else{ $list=$way ? trim($arr) : str_replace($qian,$hou,$arr); } return $list; } ~~~ 去除空白字符[\r\n\t\s] ~~~ // 去除空白字符[\r\n\t\s] public static function trim_str($str) { return preg_replace('/[\r\n\t\s]+/','',$str); } ~~~ 产生随机字串,可用来自动生成密码 默认长度6位 字母和数字混合 ~~~ /** +---------------------------------------------------------- * 产生随机字串,可用来自动生成密码 默认长度6位 字母和数字混合 +---------------------------------------------------------- * @param string $len 长度 * @param string $type 字串类型 * 0 字母 1 数字 其它 混合 * @param string $addChars 额外字符 +---------------------------------------------------------- * @return string +---------------------------------------------------------- */ public static function rand_string($len = 6, $type = '', $addChars = '') { $str = ''; switch ($type) { case 0 : $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' . $addChars; break; case 1 : $chars = str_repeat('0123456789', 3); break; case 2 : $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' . $addChars; break; case 3 : $chars = 'abcdefghijklmnopqrstuvwxyz' . $addChars; break; default : // 默认去掉了容易混淆的字符oOLl和数字01,要添加请使用addChars参数 $chars = 'ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789' . $addChars; break; } if ($len > 10) { //位数过长重复字符串一定次数 $chars = $type == 1 ? str_repeat($chars, $len) : str_repeat($chars, 5); } if ($type != 4) { $chars = str_shuffle($chars); $str = substr($chars, 0, $len); } else { // 中文随机字 for ($i = 0; $i < $len; $i++) { $str .= msubstr($chars, floor(mt_rand(0, mb_strlen($chars, 'utf-8') - 1)), 1); } } return $str; } ~~~ 格式化数据(防止注入) ~~~ //格式化数据(防止注入) public static function site_addslashes($string, $force = 0) { !defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc()); if (!MAGIC_QUOTES_GPC || $force) { if (is_array($string)) { foreach ($string as $key => $val) { $string[$key] = daddslashes($val, $force); } } else { $string = addslashes($string); } } return $string; } ~~~ 防止XSS攻击,用在表单textarea中内容过滤较多 ~~~ // 防止XSS攻击,用在表单textarea中内容过滤较多 public static function remove_xss($val) { $val = preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/', '', $val); $search = 'abcdefghijklmnopqrstuvwxyz'; $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $search .= '1234567890!@#$%^&*()'; $search .= '~`";:?+/={}[]-_|\'\\'; for ($i = 0; $i < strlen($search); $i++) { $val = preg_replace('/(&#[xX]0{0,8}' . dechex(ord($search[$i])) . ';?)/i', $search[$i], $val); // with a ; $val = preg_replace('/(&#0{0,8}' . ord($search[$i]) . ';?)/', $search[$i], $val); // with a ; } $ra1 = array( 'javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base' ); $ra2 = array( 'onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload' ); $ra = array_merge($ra1, $ra2); $found = true; // keep replacing as long as the previous round replaced something while ($found == true) { $val_before = $val; for ($i = 0; $i < sizeof($ra); $i++) { $pattern = '/'; for ($j = 0; $j < strlen($ra[$i]); $j++) { if ($j > 0) { $pattern .= '('; $pattern .= '(&#[xX]0{0,8}([9ab]);)'; $pattern .= '|'; $pattern .= '|(&#0{0,8}([9|10|13]);)'; $pattern .= ')*'; } $pattern .= $ra[$i][$j]; } $pattern .= '/i'; $replacement = substr($ra[$i], 0, 2) . '<x>' . substr($ra[$i], 2); // add in <> to nerf the tag $val = preg_replace($pattern, $replacement, $val); // filter out the hex tags if ($val_before == $val) { // no replacements were made, so exit the loop $found = false; } } } $string = self::safegl($val); return $string; } ~~~