This commit is contained in:
2025-10-04 11:46:59 +07:00
commit 97427d7cff
498 changed files with 47596 additions and 0 deletions

View 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;
}
}