我有这个代码:
$header = 'weird character->>>ÅÅÖÄ';
$header = strtolower(str_replace(array(' ', ' '), '-', preg_replace('/[^a-zA-Z0-9 s]/', '', trim($header))));
它应该输出weird-characteraaoa
,但它没有。它只是删除了 ÅÅÖÄ 字母。知道为什么这不起作用吗?如果这与它有关,我正在使用 UTF-8
我有这个代码:
$header = 'weird character->>>ÅÅÖÄ';
$header = strtolower(str_replace(array(' ', ' '), '-', preg_replace('/[^a-zA-Z0-9 s]/', '', trim($header))));
它应该输出weird-characteraaoa
,但它没有。它只是删除了 ÅÅÖÄ 字母。知道为什么这不起作用吗?如果这与它有关,我正在使用 UTF-8
我想你可能想创建一个如下的自定义函数并使用它:
function normalize ($string) {
$table = array('Å'=>'A', 'Ä'=>'A','Ö'=>'O');
return strtr($string, $table);
}
请添加您要使用的字符。
这是一个难题,因为并非所有语言都能与 ASCII 字符很好地匹配。
但是,@AlixAxel 拥有我在他的phunction framework中见过的当前最好的实现。
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;
}