数年前、私は優れたカスタムPHP CMSサイトを構築しましたが、1つの重要な問題であるUnicodeサポートを見落としていました。これは主に、当時、ユーザーが英語を話していたという事実によるものであり、それは当面の間当てはまるはずでした。もう1つの要因は、そもそもPHPのUnicodeサポートが不十分だったことです。
さて、今、計算の日が来ました。Unicode、特にUTF8をサポートしたいのですが、大きな障害が1つあります。それはPHPの文字列関数です。私が間違っている場合は訂正してください。しかし、現在でも、PHP 5.5の世界では、PHPの通常の文字列関数(strlen、substr、str_replace、strposなど)はUnicodeを完全にはサポートしていません。一方、PHPのmb_string関数はUnicodeをサポートしていますが、リソースがかなり重い可能性があることを読みました(1バイト文字ではなくマルチバイト文字を処理するため、これは理にかなっています)。
したがって、私が見ているように、3つの解決策があります。
1)すべての場合にマルチバイト文字列関数を使用します。
A.標準の文字列関数を対応するマルチバイト関数でオーバーライドしてみてください。そういえば、私はこれをするのでしょうか、そうするための最良の方法は何ですか?
B.苦労してすべてのコードを調べ、標準の文字列関数を対応するマルチバイト関数に置き換えます。
2)細心の注意を払ってすべてのコードを調べ、ユーザー入力やデータベースデータなどで機能する標準の文字列関数を対応するマルチバイト関数に置き換えます。これには、コード内のすべての文字列関数のすべての使用法を注意深く調べて、マルチバイト文字を処理する可能性がわずかでもあるかどうかを判断する必要があります。
これの利点は、Unicodeを完全にサポートしながら、最適な実行時間を実現できることです。ここでの欠点は、これを実装するのに非常に時間がかかり(そして非常に退屈で、追加するかもしれません)、必要な場所でマルチバイト文字列関数を使用するのを見逃す可能性が常にあることです。
3)ソフトウェアを完全にオーバーホールし、最初から始めます。しかし、これは私が避けようとしていることです。
他に利用できるオプションがある場合は、お知らせください。