Я пытаюсь придумать функцию, которая хорошо справляется с дезинфекцией определенных строк, чтобы они были безопасны для использования в URL-адресе (например, для сообщения), а также безопасно использовать в качестве имен файлов. Например, когда кто-то загружает файл, я хочу убедиться, что я удалю все опасные символы из имени.
До сих пор я придумал следующую функцию, которая, я надеюсь, решает эту проблему и позволяет использовать и внешние данные UTF-8.
/**
* Convert a string to the file/URL safe "slug" form
*
* @param string $string the string to clean
* @param bool $is_filename TRUE will allow additional filename characters
* @return string
*/
function sanitize($string = '', $is_filename = FALSE)
{
// Replace all weird characters with dashes
$string = preg_replace('/[^\w\-'. ($is_filename ? '~_\.' : ''). ']+/u', '-', $string);
// Only allow one dash separator at a time (and make string lowercase)
return mb_strtolower(preg_replace('/--+/u', '-', $string), 'UTF-8');
}
Есть ли у кого-нибудь какие-то сложные данные выборок, которые я могу использовать для этого - или узнать лучший способ защитить наши приложения от плохих имен?
$is-filename позволяет некоторым дополнительным символам, таким как temp vim files
update: удалил символ звезды, так как я не мог придумать правильное использование