我正在尝试想出一个函数,它可以很好地清理某些字符串,这样它们就可以安全地在URL中使用(就像post slug一样),也可以安全地用作文件名。例如,当有人上传文件时,我希望确保删除名称中的所有危险字符。
到目前为止,我已经想出了下面的函数,我希望它能解决这个问题,并允许国外的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允许一些额外的字符,如临时vim文件
更新:删除了星号,因为我想不出一个有效的用法
https://stackoverflow.com/questions/2668854
复制相似问题