1

すべての言語で UTF8 サポートが必要な zend フレームワークで Web アプリを構築しています。ストリップスラッシュなどの機能を除いて、これはうまくいくようです。

この URL では、MBSTRING http://developer.loftdigital.com/blog/php-utf-8-cheatsheetの使用について説明しています。

サーバーで mbstring を使用し、UTF8 に対応していない関数をすべて MB バリアントで置き換える必要がありますか?

Zend Framework は UTF8 をサポートするようサポートしていませんか? そうでない場合は、ZF コードベースのすべての関数を mb_ 代替に置き換える必要がありますよね? 新しい ZF にアップグレードするとコードが壊れてしまうため、これは不可能な作業です。

mail()      -> mb_send_mail()
strlen()    -> mb_strlen()  
strpos()    -> mb_strpos()
strrpos()   -> mb_strrpos()
substr()    -> mb_substr()
strtolower()    -> mb_strtolower()
strtoupper()    -> mb_strtoupper()
substr_count()  -> mb_substr_count()
ereg()      -> mb_ereg()
eregi()     -> mb_eregi()
ereg_replace()  -> mb_ereg_replace()
eregi_replace() -> mb_eregi_replace()   
split()     -> mb_split()

これについてあなたのアドバイスは何ですか、私はこれについて完全に間違っているかもしれません? 私は使用について読んだ:

mbstring.func_overload  = 7 ;

すべての関数を自動的にオーバーロードします。

これは、UTF8 を必要としない既存のアプリケーションを壊しますか、それとも「正常に劣化」しますか?

4

3 に答える 3

3

しないでください、そして私は繰り返すことができるだけです、mbstringオーバーロードを使用しないでください。たとえば、strlen()がバイト数を返すことに依存しているメソッドは、間違いなく壊れます。Zend Frameworkのすべてのコンポーネントは、デフォルトでUTF-8を想定していますが、指示すれば、さまざまな文字セットを処理できます。これは、デフォルトでPHPに組み込まれているiconv_ *を介して行われるため、mbstringなどの追加のライブラリに依存することはありません。

Zend FrameworkにUTF-8について通知する必要があるのは、データベース接続だけです。これは、charsetオプションを使用して簡単に実行できます(Zend_DbまたはZend_Applicationのドキュメントを参照)。また、content-typeヘッダーを介して配信する文字セットをユーザーエージェントに通知する必要もあります。また、タグにaccept-charset="utf-8"を追加することを忘れないでください。

于 2010-08-22T01:45:39.373 に答える
3

すべての関数を mb_string でオーバーロードするのが良いとは思いません。PHP が utf8 をネイティブに処理しないことは誰もが知っているので、次のようなものを使用します。

データベースには「SET NAMES utf8」を使用し、Zendmail を使用してエンコーディングをパラメーターとして渡し、Zend メールが内部で自己管理できるようにします。

別の例はZend_Validate_StringLength、というパラメーターがあり、次の関数encodingで使用 されます。iconv

 public function setEncoding($encoding = null)
    {
        if ($encoding !== null) {
            $orig   = iconv_get_encoding('internal_encoding');
            $result = iconv_set_encoding('internal_encoding', $encoding);
            if (!$result) {
                require_once 'Zend/Validate/Exception.php';
                throw new Zend_Validate_Exception('Given encoding not supported on this OS!');
            }

            iconv_set_encoding('internal_encoding', $orig);
        }

        $this->_encoding = $encoding;
        return $this;
    }

ただし、フレームワークに関連しないロジックでは、アプリで常に mb_string を使用します。

たとえば、昨日、データベースから投稿とコメントの utf8 配列をソートしていました

PHPはネイティブでutf8を処理しないため、mb文字列を使用せずに仕事を終わらせることはできませんでした:(

私はmb stringが大好きです。それは私の人生を楽にしてくれました

編集:私が言いたかったのは、必要なときはいつでもmbstringを使用し、フレームワークにそれ自体を管理させることです。すべての関数を自動的にオーバーロードするのは好きではありません。

于 2010-08-20T14:45:17.660 に答える
1

Zend FrameworkはUTF8をサポートしていませんか?

知らない。たとえば、strlenを検索するコードをgrepするだけですが、マルチバイトセーフではないコンテキストで使用されているかどうかを判断するには、コードを確認する必要があります。クイックグーグルでこのhttp://www.iezzi.ch/archives/371が明らかになったため、ZFはUTF8アプリ用に準備されているようです。

これについてのあなたのアドバイスは何ですか、私はこれについて完全に間違っているかもしれませんか?使用について読んだ:mbstring.func_overload = 7; これにより、UTF8を必要としない既存のアプリケーションが破損するのでしょうか、それとも「正常に劣化する」のでしょうか。

もちろん、マルチバイト以外の文字列でも機能し、壊れることはありません。ただし、使用する前に、パフォーマンスが低下するため、本当に必要かどうかを確認することをお勧めします。

于 2010-08-20T14:24:23.997 に答える