<?php
$unclean_name = 'File name %20 %20 %2C Décor \/. /. . z \... y \...... x ./ “This name” is & 462^^ not = that grrrreat -][09]()1234747) sdlfjfkleq flekqjelkjqlk fjlkqe fqf';
$seperator = '_';
$fallback_name = 'generated__' . date('Y-m-d_H-m_A');
$max_chars = '180';
$file_extension = '....ta()r.gz[]';
echo str_file($unclean_name, $seperator, $fallback_name, $max_chars, $file_extension);
function str_file(
$str,
$sep = '_',
$default = '',
$trim = 180,
$ext = ''
) {
// file name filters used to clean and prepare a string
function str_file_filter(
$str,
$sep = '_',
$strict = false,
$trim = 180
) {
$str = strip_tags(strtolower($str));
$str = preg_replace("/&#?[a-z0-9]{2,8};/i", '', $str);
$str = str_replace("%20", ' ', $str); //
$str = preg_replace("/\s+/", $sep, $str);
$str = preg_replace("/\.+/", '.', $str);
if ($strict) {
$str = preg_replace("/([^\w\d\\" . $sep . ".])/", '', $str); // allow only words, digits, underscore, period
} else {
$str = preg_replace("/([^\w\d\\" . $sep . "\[\]\(\).])/", '', $str); // allow only words, digits, underscore, period, [], ()
}
return substr($str, 0, $trim);
}
// get or set a default file name in case all chars are trimmed from $str ensuring there is an id at tail
if (empty($str) && empty($default)) {
$str = 'no_name__' . date('Y-m-d_H-m_A') . '__' . uniqid();
} elseif (empty($str)) {
$str = $default;
}
// run $str and/or $ext through filters to clean up and remove special chars
if (!empty($ext)) {
$ext = '.' . $ext; // ensure there is at least 1 period
return str_file_filter($str, $sep) . str_file_filter($ext, '', true);
} else {
return str_file_filter($str, $sep);
}
}
- Output for 5.5.0 - 5.5.38, 5.6.0 - 5.6.40, 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.26, 7.3.0 - 7.3.13, 7.4.0 - 7.4.1
- file_name_2c_dcor_._._._z_._y_._x_._this_name_is__462_not__that_grrrreat_][09]()1234747)_sdlfjfkleq_flekqjelkjqlk_fjlkqe_fqf.tar.gz
preferences:
182.8 ms | 403 KiB | 196 Q