首页 > 解决方案 > 使用 preg_replace 更改字符串名称删除 espace 重音和点,但允许点扩展

问题描述

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

Sin título => Sin_tÃ_tulo

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

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

标签: phpstringpreg-replace

解决方案


使用 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

推荐阅读