3

スペイン語を話す私の情報源によると、これらの値の両方を含む文字列のリストでパターン「パン」を検索している場合:

$normalString = "abcpan123";
$specialString = "abcpañ123";

それらの両方に一致する必要があります-たとえばstrpos("pan", $normalString)strpos("pan", $specialString)両方とも「3」を返す必要があります。

ただし、最初のものだけが false 以外の値を返します。

mySQL で "like "%pan%" に対して同様の検索を行うと、両方の文字列に一致します。

おそらく、この状況は n-tilde だけでなく、アクセントなどで変更された他の文字にも当てはまります。

これをどのように処理するかについては困惑しています...他の人が遭遇して解決したに違いない問題のようですが、既存の適切な解決策は見つかりませんでした。PHP の別の機能、または何らかの構成を期待していましたが、喜びはありませんでした。

確かに、strpos() を使用する代わりに正規表現を使用してカスタム コードを作成することもできますが、複数の外国語でどの文字が同等と見なされるかを判断する方法さえわかりません。

私のための助けはありますか?

4

1 に答える 1

0

strposは文字をそのまま比較しますが、「n」は単純に「ñ」ではありません。実際、これは単純にbytesを比較するだけで、異なるエンコーディングを認識することさえありません。ロケールと照合を考慮した比較が必要な場合は、 を使用しますstrcoll。コメントも読んでください。それに関するドキュメントはそれほど多くありません。

データベースにはすぐに使用できる照合設定が含まれているため、このようなあいまい検索を実行できます。

別の方法は、すべての文字列をプレーン ASCII 文字に正規化してから、 を使用して比較することiconv('UTF-8', 'ASCII//TRANSLIT', $string)です。

于 2012-03-15T01:25:08.403 に答える