update
This commit is contained in:
126
inc/Hura8/System/Security/DataClean.php
Normal file
126
inc/Hura8/System/Security/DataClean.php
Normal file
@@ -0,0 +1,126 @@
|
||||
<?php
|
||||
|
||||
namespace Hura8\System\Security;
|
||||
|
||||
|
||||
class DataClean
|
||||
{
|
||||
|
||||
/**
|
||||
* @description limit max length. limitLength("toi ten nguyen", 10) => "toi ten ng"
|
||||
* @param string $text
|
||||
* @param int $max_length
|
||||
* @return string
|
||||
*/
|
||||
public static function limitLength(string $text, int $max_length = 100 ) : string
|
||||
{
|
||||
if(strlen($text) <= $max_length) {
|
||||
return $text;
|
||||
}
|
||||
|
||||
return substr($text, 0, $max_length-1);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @description limit max length but keep full words. limitLengthFullWords("toi ten nguyen", 10) => "toi ten"
|
||||
* @param string $text
|
||||
* @param int $max_length
|
||||
* @return string
|
||||
*/
|
||||
public static function limitLengthFullWords(string $text, int $max_length = 100 ) : string
|
||||
{
|
||||
|
||||
if(strlen($text) <= $max_length) {
|
||||
return $text;
|
||||
}
|
||||
|
||||
$char_at_max_length = $text[$max_length-1];
|
||||
if($char_at_max_length == ' ') {
|
||||
return substr($text, 0, $max_length-1);
|
||||
}
|
||||
|
||||
//else fall back to the last space
|
||||
$words = explode(" ", substr($text, 0, $max_length-1));
|
||||
array_pop($words);
|
||||
|
||||
return join(" ", $words);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $input_list array
|
||||
* @param $type string
|
||||
* @return array
|
||||
*/
|
||||
public static function makeListOfInputSafe(array $input_list, $type){
|
||||
if(!sizeof($input_list)) return [];
|
||||
|
||||
$result = [];
|
||||
foreach ($input_list as $key => $str) {
|
||||
$result[$key] = self::makeInputSafe($str, $type);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $input string data to process
|
||||
* @param $type string, type of data to validate against, enum : int|double|email|id|string|date|plain
|
||||
* @return mixed
|
||||
*/
|
||||
public static function makeInputSafe($input, $type){
|
||||
|
||||
if(is_array($input)) {
|
||||
return $input;
|
||||
}
|
||||
|
||||
if ( $type == DataType::ID ) {
|
||||
//is $input the database item_id ?
|
||||
return preg_replace('/[^a-z0-9_\-\.]/i', '', $input);
|
||||
}
|
||||
|
||||
if ( $type == DataType::EMAIL ) {
|
||||
return filter_var($input, FILTER_VALIDATE_EMAIL) ? $input : '';
|
||||
}
|
||||
|
||||
if ( $type == DataType::INTEGER ) {
|
||||
// support negative number
|
||||
return (int) preg_replace('/[^0-9\-]/', '', $input);
|
||||
}
|
||||
|
||||
if ( $type == DataType::DOUBLE ) {
|
||||
// support negative number
|
||||
$input = preg_replace('/[^0-9,\-]/', '', $input);
|
||||
//convert vietnamese style , to . for percentage
|
||||
$input = str_replace(",", ".", $input);
|
||||
|
||||
return (double) $input;
|
||||
}
|
||||
|
||||
if ( $type == DataType::DATE ) {
|
||||
// support pattern:
|
||||
// date = d-m-Y
|
||||
// datetime = d-m-Y H:i:a
|
||||
$pattern = "/([0-9]{2})-([0-9]{2})-([0-9]{2,4})(\s)?([0-9]{1,2}:[0-9]{1,2}(:[0-9]{1,2})?)?/i";
|
||||
return preg_replace($pattern, '', $input);
|
||||
}
|
||||
|
||||
if ( $type == DataType::PLAIN_TEXT || $type == DataType::STRING ) {
|
||||
return strip_tags($input);
|
||||
}
|
||||
|
||||
if ( $type == DataType::NON_VIETNAMESE ) {
|
||||
return preg_replace('/[^a-z0-9_\s\-]/i', '', $input);
|
||||
}
|
||||
|
||||
if ( $type == DataType::RICH_TEXT ) {
|
||||
return $input;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user