分享自定义的几个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加MYSQL服务器
Oct 09 PHP
php中文本数据翻页(留言本翻页)
Oct 09 PHP
PHP调用三种数据库的方法(1)
Oct 09 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
Jul 18 PHP
php中长文章分页显示实现代码
Sep 29 PHP
10 个经典PHP函数
Oct 17 PHP
PHP Header失效的原因分析及解决方法
Nov 16 PHP
PHP使用strrev翻转中文乱码问题的解决方法
Jan 13 PHP
php base64 编码与解码实例代码
Mar 21 PHP
老生常谈PHP面向对象之解释器模式
May 17 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
Aug 28 PHP
PHP7匿名类的用法示例
Apr 05 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
php实现事件监听与触发的方法
2014/11/21 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
PHP实现的简单网络硬盘
2015/07/29 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
js控制div及网页相关属性的代码
2009/12/19 Javascript
js location.replace与location.reload的区别
2010/09/08 Javascript
关于jquery性能最佳实践的讨论,与求教
2012/03/30 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
jquery实现的一个文章自定义分段显示功能
2014/05/23 Javascript
javascript实现继承的简单实例
2015/07/26 Javascript
JQuery EasyUI的使用
2016/02/24 Javascript
基于gulp合并压缩Seajs模块的方式说明
2016/06/14 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
2019/12/10 Javascript
介绍Python中的__future__模块
2015/04/27 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
Python实现DDos攻击实例详解
2019/02/02 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
python实现控制台输出彩色字体
2020/04/05 Python
django模板获取list中指定索引的值方式
2020/05/14 Python
pyqt5 textEdit、lineEdit操作的示例代码
2020/08/12 Python
python中scrapy处理项目数据的实例分析
2020/11/22 Python
美国办公用品购物网站:Quill.com
2016/09/01 全球购物
Agoda西班牙:全球特价酒店预订
2017/06/03 全球购物
Jones New York官网:美国女装品牌,受白领女性欢迎
2019/11/26 全球购物
计算机求职自荐信范文
2014/04/19 职场文书
数学教研活动总结
2014/07/02 职场文书
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
关于对大人不礼貌的检讨书
2014/09/29 职场文书
教你怎么用python实现字符串转日期
2021/05/24 Python