使用 preg_replace 更改字符串名称删除空格重音符号和点但允许点扩展

Change String name with preg_replace delete espace accent and dots but allow dot extension

我有一个代码可以删除点并允许点扩展,但重音看起来像:

Sin título => Sin_tÃ_tulo

$new_name = preg_replace("/\W(?=.*\.[^.]*$)/", "_", $string);

我想删除重音或更改为下划线

使用 intl 的两个建议(如果您的配置中缺少此模块,请安装它):

$tls = Transliterator::createFromRules("::Latin-ASCII; [^A-Za-z0-9] > '_' ");
echo $tls->transliterate("Sin título"); // Sin_titulo

或:

$tls = Transliterator::createFromRules("::NFD; [^A-Za-z0-9] > '_' ");
echo $tls->transliterate("Sin título"); // Sin_ti_tulo