2

数年前、私は優れたカスタム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)ソフトウェアを完全にオーバーホールし、最初から始めます。しかし、これは私が避けようとしていることです。

他に利用できるオプションがある場合は、お知らせください。

4

1 に答える 1

2

私は1.Bのバリエーションに行きます:

1.B.2)自動の「検索と置換」機能を使用します (慎重に作成された単一のsedコマンドで実行できる場合があります)。

1 が 2 を支持する理由: 時期尚早の最適化は諸悪の根源です。mb_ 関数が「リソースが重い」とどこで読んだのかわかりませんが、はっきり言って、まったくナンセンスです。もちろん、CPU サイクルがさらに数回かかりますが、それは気にする必要のない次元です。何らかの理由で、PHP 開発者は、「二重引用符よりも単一引用符の方が速い」などのマイクロ最適化について議論するのが好きですが、実際に違いを生むもの (主に I/O とデータベース) に焦点を当てる必要があります。本当に、努力する価値はありません。

自動化の理由:可能です。より効率的です。さらに引数が必要ですか?

于 2013-03-22T10:09:03.537 に答える