我正在使用The perfect PHP clean url generator使用上传脚本清理一些文件名(以及在其他地方清理我的永久链接)。如果函数如下所示,我如何修改它以允许.
:
setlocale(LC_ALL, 'en_US.UTF8');
function toAscii($str, $replace=array(), $delimiter='-', $exception = '') {
if( !empty($replace) ) {
$str = str_replace((array)$replace, ' ', $str);
}
$clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
$clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean);
$clean = strtolower(trim($clean, '-'));
$clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);
return $clean;
}
提前致谢。
编辑稍微修改了这个功能以反映我的实际用法 - 抱歉。
答案 0 :(得分:7)
所以你只是想避免替换文字.
字符,这是正确的吗?如果点在字符类中,则应按字面解释,因此您的第一个正则表达式就会变为:
$clean = preg_replace("/[^a-zA-Z0-9\/_|+ .-]/", '', $clean);
答案 1 :(得分:0)
不是答案,只需注意一些事项:
RegEx设置:
$clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean);
$clean = strtolower(trim($clean, '-'));
$clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);
上面的破折号应位于集合的开头:
$clean = preg_replace("/[^-a-zA-Z0-9\/_|+ ]/", '', $clean);
$clean = strtolower(trim($clean, '-'));
$clean = preg_replace("/[-\/_|+ ]+/", $delimiter, $clean);
如果它们不在开头,则表示范围字符,即[A-Za-z0-9]。
可以帮助别人。