分享自定义的几个PHP功能函数


Posted in PHP onApril 15, 2015

最近不是在折腾论坛嘛,各种类各种函数,原创一些,从别人那儿qiang过来一些,在此分享出来,希望有朋友能用的到~

注意:部分函数可能不够完善,由此造成的漏洞风险自担~

提交过滤

function filter($text)
{
 //完全过滤注释
 $text = preg_replace('/<!--?.*-->/', '', $text);
 //完全过滤js
 $text = preg_replace('/<script?.*\/script>/', '', $text);
 //过滤危险的属性,如:过滤on事件lang js
 while (preg_match('/(<[^><]+)( lang|action|background|codebase|dynsrc|lowsrc)[^><]+/i', $text, $mat)) {
 $text = str_replace($mat[0], $mat[1], $text);
 }
 while (preg_match('/(<[^><]+)(window\.|javascript:|js:|about:|file:|document\.|vbs:|cookie)([^><]*)/i', $text, $mat)) {
 $text = str_replace($mat[0], $mat[1] . $mat[3], $text);
 }
 //过滤多余html
 $text = preg_replace('/<\/?(html|head|meta|link|base|basefont|body|bgsound|script|form|iframe|frame|frameset|applet|id|ilayer|layer|name|script|xml)[^><]*>/i', '', $text);
 //反转换
 $text = str_replace('[', '<', $text);
 $text = str_replace(']', '>', $text);
 $text = str_replace('|', '"', $text);
 return $text;
}

提交过滤2

function stripslashes_array(&$array)
{
 while (list($key, $var) = each($array)) {
 if ($key != 'argc' && $key != 'argv' && (strtoupper($key) != $key || '' . intval($key) == "$key")) {
 if (is_string($var)) {
 $array[$key] = stripslashes($var);
 }
 if (is_array($var)) {
 $array[$key] = stripslashes_array($var);
 }
 }
 }
 return $array;
}

字符串截取(这个是emlog里提出来的,其实也就是substr的增强版)

function subString($strings, $start, $length)
{
 if (function_exists('mb_substr') && function_exists('mb_strlen')) {
 $sub_str = mb_substr($strings, $start, $length, 'utf8');
 return mb_strlen($sub_str, 'utf8') < mb_strlen($strings, 'utf8') ? $sub_str . '...' : $sub_str;
 }
 $str = substr($strings, $start, $length);
 $char = 0;
 for ($i = 0; $i < strlen($str); $i++) {
 if (ord($str[$i]) >= 128)
 $char++;
 }
 $str2 = substr($strings, $start, $length + 1);
 $str3 = substr($strings, $start, $length + 2);
 if ($char % 3 == 1) {
 if ($length <= strlen($strings)) {
 $str3 = $str3 .= '...';
 }
 return $str3;
 }
 if ($char % 3 == 2) {
 if ($length <= strlen($strings)) {
 $str2 = $str2 .= '...';
 }
 return $str2;
 }
 if ($char % 3 == 0) {
 if ($length <= strlen($strings)) {
 $str = $str .= '...';
 }
 return $str;
 }
}

IP地址匿名化(最后一位替换为星号)

function AnonymousIP() 
{
 $ip = GetIP();
 if ($ip == "Unknown") {
 $removed_ip = "未知用户";
 }
 if (strpos($ip, ":")) {
 $removed_ip = "IPv6用户";
 } else {
 $reg1 = '/((?:\d+\.){3})\d+/';
 $reg2 = '~(\d+)\.(\d+)\.(\d+)\.(\d+)~';
 $removed_ip = preg_replace($reg1, "\\1*", $ip);
 }
 return $removed_ip;
}

获取客户端IP地址

function GetIP()
{
 if (@$_SERVER["HTTP_X_FORWARDED_FOR"])
 $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
 else if (@$_SERVER["HTTP_CLIENT_IP"])
 $ip = $_SERVER["HTTP_CLIENT_IP"];
 else if (@$_SERVER["REMOTE_ADDR"])
 $ip = $_SERVER["REMOTE_ADDR"];
 else if (@getenv("HTTP_X_FORWARDED_FOR"))
 $ip = getenv("HTTP_X_FORWARDED_FOR");
 else if (@getenv("HTTP_CLIENT_IP"))
 $ip = getenv("HTTP_CLIENT_IP");
 else if (@getenv("REMOTE_ADDR"))
 $ip = getenv("REMOTE_ADDR");
 else
 $ip = "Unknown";
 return $ip;
}

字符串加密(支持中文)

function dencrypt($string, $isEncrypt = true, $key = "youdian")
{
 if (!isset($string{0}) || !isset($key{0})) {
 return false;
 }
 
 $dynKey = $isEncrypt ? hash('sha1', microtime(true)) : substr($string, 0, 40);
 $fixedKey = hash('sha1', $key);
 
 $dynKeyPart1 = substr($dynKey, 0, 20);
 $dynKeyPart2 = substr($dynKey, 20);
 $fixedKeyPart1 = substr($fixedKey, 0, 20);
 $fixedKeyPart2 = substr($fixedKey, 20);
 $key = hash('sha1', $dynKeyPart1 . $fixedKeyPart1 . $dynKeyPart2 . $fixedKeyPart2);
 
 $string = $isEncrypt ? $fixedKeyPart1 . $string . $dynKeyPart2 : (isset($string{339}) ? gzuncompress(base64_decode(substr($string, 40))) : base64_decode(substr($string, 40)));
 
 $n = 0;
 $result = '';
 $len = strlen($string);
 
 for ($n = 0; $n < $len; $n++) {
 $result .= chr(ord($string{$n}) ^ ord($key{$n % 40}));
 }
 return $isEncrypt ? $dynKey . str_replace('=', '', base64_encode($n > 299 ? gzcompress($result) : $result)) : substr($result, 20, -20);
}

检查字符串是否包含中文

function CheckChinese($string)
{
 if (preg_match("/[\x7f-\xff]/", $string)) {
 return true;
 } else {
 return false;
 }
}

隐藏文件真实路径

function FileHeaderJump($file)
{
 header('Content-Description: File Transfer');
 header('Content-Type: application/octet-stream');
 header('Content-Disposition: attachment; filename=' . basename($file));
 header('Content-Transfer-Encoding: binary');
 header('Expires: 0');
 header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
 header('Pragma: public');
 header('Content-Length: ' . filesize($file));
 ob_clean();
 flush();
 readfile($file);
 exit;
}

生成随机字符串,自定义长度

function CreateRandomString($length)
{
 $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
 $password = "";
 for ($i = 0; $i < $length; $i++) {
 $password .= $chars[mt_rand(0, strlen($chars) - 1)];
 }
 return $password;
}
PHP 相关文章推荐
PHP中的正规表达式(二)
Oct 09 PHP
坏狼php学习 计数器实例代码
Jun 15 PHP
在PHP中使用curl_init函数的说明
Nov 02 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
Jun 16 PHP
ThinkPHP Mobile使用方法简明教程
Jun 18 PHP
浅析php工厂模式
Nov 25 PHP
Codeigniter发送邮件的方法
Mar 19 PHP
php获取错误信息的方法
Jul 17 PHP
PHP实现的json类实例
Jul 28 PHP
php实现可逆加密的方法
Aug 11 PHP
ThinkPHP连接Oracle数据库
Apr 22 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
Dec 20 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
Apr 14 #PHP
PHP也能干大事 随机函数
Apr 14 #PHP
PHP数组操作――获取数组最后一个值的方法
Apr 14 #PHP
微信公众平台之快递查询功能用法实例
Apr 14 #PHP
php生成rss类用法实例
Apr 14 #PHP
php修改上传图片尺寸的方法
Apr 14 #PHP
php动态添加url查询参数的方法
Apr 14 #PHP
You might like
FCKeditor添加自定义按钮
2008/03/27 PHP
将一维或多维的数组连接成一个字符串的php代码
2010/08/08 PHP
php中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
PHP基于CURL进行POST数据上传实例
2014/11/10 PHP
浅析php工厂模式
2014/11/25 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
SWFObject Flash js调用类
2008/07/08 Javascript
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
Extjs中ComboBox加载并赋初值的实现方法
2012/03/22 Javascript
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
基于jQuery实现多层次的手风琴效果附源码
2015/09/21 Javascript
js+css绘制颜色动态变化的圈中圈效果
2016/01/27 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
微信小程序 SocketIO 实例讲解
2016/10/13 Javascript
微信小程序 swiper制作tab切换实现附源码
2017/01/21 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
layer.open组件获取弹出层页面变量、函数的实例
2019/09/25 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python抓取网页图片示例(python爬虫)
2014/04/27 Python
python使用MySQLdb访问mysql数据库的方法
2015/08/03 Python
Python爬虫之模拟知乎登录的方法教程
2017/05/25 Python
利用aardio给python编写图形界面
2017/08/21 Python
python中virtualenvwrapper安装与使用
2018/05/20 Python
python smtplib模块自动收发邮件功能(一)
2018/05/22 Python
python 找出list中最大或者最小几个数的索引方法
2018/10/30 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
python隐藏终端执行cmd命令的方法
2019/06/24 Python
基于Django实现日志记录报错信息
2019/12/17 Python
详解anaconda安装步骤
2020/11/23 Python
HTML5 HTMLCollection和NodeList的区别详解
2020/04/29 HTML / CSS
夏洛特的网观后感
2015/06/15 职场文书
2015重阳节敬老活动总结
2015/07/29 职场文书