すべての言語がASCII文字とうまく一致するわけではないため、これは難しい問題です。
ただし、@ AlixAxelには、彼のファンクションフレームワークでこれまでに見た中で最高の実装があります。
public static function Slug($string, $slug = '-', $extra = null)
{
return strtolower(trim(preg_replace('~[^0-9a-z' . preg_quote($extra, '~') . ']+~i', $slug, self::Unaccent($string)), $slug));
}
public static function Unaccent($string)
{
if (extension_loaded('intl') === true)
{
$string = Normalizer::normalize($string, Normalizer::FORM_KD);
}
if (strpos($string = htmlentities($string, ENT_QUOTES, 'UTF-8'), '&') !== false)
{
$string = html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|caron|cedil|circ|grave|lig|orn|ring|slash|tilde|uml);~i', '$1', $string), ENT_QUOTES, 'UTF-8');
}
return $string;
}