分享自定义的几个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 相关文章推荐
dedecms模版制作使用方法
Apr 03 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
Jun 23 PHP
php中使用PHPExcel读写excel(xls)文件的方法
Sep 15 PHP
php提示Failed to write session data错误的解决方法
Dec 17 PHP
php计算2个日期的差值函数分享
Feb 02 PHP
php继承中方法重载(覆盖)的应用场合
Feb 09 PHP
PHP实现的购物车类实例
Jun 17 PHP
ajax+php控制所有后台函数调用
Jul 15 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
Jul 09 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
Oct 07 PHP
Mac下快速搭建PHP开发环境步骤详解
May 05 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
Oct 10 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
雄兵连三大错觉:凯莎没了,凉冰阵亡了,华烨觉得自己又行了
2020/04/09 国漫
php获取一个变量的名字的方法
2014/09/05 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
2014/12/17 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
symfony2.4的twig中date用法分析
2016/03/18 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
写给想学习Javascript的朋友一点学习经验小结
2010/11/23 Javascript
通过javascript获取iframe里的值示例代码
2013/06/24 Javascript
使用简洁的jQuery方法实现隔行换色功能
2014/01/02 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
jquery中使用循环下拉菜单示例代码
2014/09/24 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
.netcore+vue 实现压缩文件下载功能
2020/09/24 Javascript
用Python实现协同过滤的教程
2015/04/08 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
2018/01/04 Python
python中set()函数简介及实例解析
2018/01/09 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
2019/05/31 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
Window10上Tensorflow的安装(CPU和GPU版本)
2020/12/15 Python
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
英国高级百货公司:Harvey Nichols
2017/01/29 全球购物
欧洲最大的笔和书写专家:The Pen Shop
2017/03/19 全球购物
如何使用PHP session
2015/04/21 面试题
护士专业推荐信
2013/11/02 职场文书
金融行业务员的自我评价
2013/12/13 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
大学生职业生涯十年规划书范文
2014/09/17 职场文书
领导班子“四风问题”“整改方案
2014/10/02 职场文书
工会文体活动总结
2015/05/07 职场文书