1

多くの異なるヨーロッパ言語の特殊なアクセント付き文字を含むことが多い医学用語をソートするための文字列比較関数を作成しています.MySQLのlatin1_general_ci.

まず、スペース、引用符、ハイフン、括弧などを削除するために、文字列に対していくつかの基本的な変更を行っています。問題は、文字列をstrcoll()デフォルトのロケールを使用して渡すときに発生します。たとえば、考慮するほど賢くないためです。 、辞書編集的に通常の e と同等のアクセント付き e。

ドイツ語やフランス語などのロケールを使用することには慎重です。考慮する必要があるすべての特殊文字が含まれていない可能性があるからです。latin1_general_ci照合に似たものを私に与えるロケールはありますか? それとも別の解決策がありますか?

私の素朴な解決策は、大きな連想配列を作成して、アクセント付きの文字を通常の文字に対応するものにマップし、これをstr_replace()で使用することですが、それは遅くて退屈に聞こえます (そしてエラーが発生しやすくなります)。可能であれば、言語に組み込まれているものを使用したいと思います。

また、現在のロケールの照合を尊重しますか、それともこれを行うだけstrcmp()ですか?strcasecmp()strcoll()

4

2 に答える 2

1

多分これ:

setlocale(LC_COLLATE, 'fr_FR.Latin1', 'fr.Latin1', 'fr_FR.Latin-1', 'fr.Latin-1');

strcmp()strcasecmp()ローカライズされていません。

于 2009-06-19T01:30:07.407 に答える
0

文字列の正規化に役立つiconv関数を試すこともできます。これにより、アクセント付きの e から通常の e の状況が処理されます。utf8 文字列の並べ替えに関するこの関連する質問も参照してください。

于 2009-06-19T02:46:26.490 に答える