0

私はこのコードを持っています:

$header = 'weird character->>>ÅÅÖÄ';
$header = strtolower(str_replace(array('  ', ' '), '-', preg_replace('/[^a-zA-Z0-9 s]/', '', trim($header))));

出力するはずですweird-characteraaoaが、出力しません。ÅÅÖÄ文字を削除するだけです。これが機能しない理由はありますか?UTF-8と関係がある場合は、UTF-8を使用しています。

4

2 に答える 2

2

すべての言語が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;
    }
于 2012-11-01T15:08:28.947 に答える
2

以下のようなカスタム関数を作成して使用することをお勧めします。

function normalize ($string) {
   $table = array('Å'=>'A', 'Ä'=>'A','Ö'=>'O');
   return strtr($string, $table);
}

使用したい文字を追加してください。

于 2012-11-01T15:28:43.803 に答える