php - 特殊 - 曲折 アクセント 記号



どのようにアクセントを削除し、文字を "プレーン" ASCII文字に変換するのですか? (4)

@palantirのリクエストでこれを再投稿する...

私は完全に信頼性の低いiconvを見つけました。私はpreg_replaceのソリューションと大きな配列を嫌い...私の好きな方法(そして私が見つけた唯一の信頼できる方法)は...

function toASCII( $str )
{
    return strtr(utf8_decode($str), 
        utf8_decode(
        'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ'),
        'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy');
}

この質問には既に回答があります:

文字列からアクセントを削除する最も効率的な方法は何ですか?たとえば、 ÈâuÑEaunなりEaunか?

シンプルで、私が行方不明になっているか、正規表現で構築されていますか?


Answer #1

iconvがインストールされている場合は、これを試してください(この例では、入力文字列がUTF-8であることを前提としています)。

echo iconv('UTF-8', 'ASCII//TRANSLIT', $string);

(iconvは、あらゆる種類のエンコーディング間で変換するライブラリであり、効率的で、デフォルトで多くのPHPディストリビューションに含まれています。 「カールのあるラテン文字N? 私はどちらもいない 。))


Answer #2

注:私は他の人に役立つことを希望して、これを別の同様の質問から転記しています。

私はiconv()があまりにも不完全であることが判明したので、DjangoプロジェクトのURLify.jsに基づいてPHPライブラリを作成しました。 あなたはここにそれを見つけることができます:

https://github.com/jbroadway/urlify

ラテン文字、ギリシャ語、トルコ語、ロシア語、ウクライナ語、チェコ語、ポーランド語、ラトビア語を処理します。


Answer #3

私はすべてのテストケース( http://php.net/manual/en/transliterator.transliterate.phpからコピーされました)で動作する解決策を見つけました:

var_dump(transliterator_transliterate('Any-Latin; Latin-ASCII; [\u0080-\u7fff] remove',
    "A æ Übérmensch på høyeste nivå! И я люблю PHP! есть. fi ¦"));
// string(50) "A ae Ubermensch pa hoyeste niva! I a lublu PHP! est. fi "

http://www.php.net/normalizer参照してhttp://www.php.net/normalizer

編集:このソリューションは、 setlocale()使用して設定されたロケールに依存しませんiconv()に対するもう1つの利点は、非ラテン文字でさえ無視されないことです。

EDIT2:私は、私が最初に投稿した音訳によってカバーされていないいくつかの文字があることを発見しました。 Any-Latinは、キリル文字を、ラテン文字セットに適合しない文字に変換します: ʹhttp://en.wikipedia.org/wiki/Prime_%28symbol%29 )。 これらの非ラテン文字をすべて[\u0100-\u7fff] removeには、 [\u0100-\u7fff] removeを追加しました。 私はまた、テキストにテストを追加しました;)

私は、彼らがラテンのアルファベットを意味し、ここではラテン語の文字セットの一つではないことを示唆しています。 しかし、とにかく - 私の意見では、彼らは何かASCIIにLatin-ASCII ASCIIでそれを翻字する必要があります...

EDIT3:ここで別の変更を申し訳ありません。 ASCII文字だけを出力として取得するには、u0100の代わりに文字をu0080にしなければなりませんでした。 上記のテストが更新されます。





ascii