2017-10-09 11 views
2

私は文字列がマルチバイトであるかどうかを知るためのスクリプトを持っていますか?どこでmb_stringを使用するのか、また使用しない場所を知るには?

いつもmb_string機能を使用しても安全ですか?

遅くなっていませんか?それはマルチバイト文字列ではないと考えて通常の文字列関数と同じ速さで動作しますか?

+1

だから、答えを "受け入れる"のように、質問を投稿し、解決策を得て、それについて何もしないで逃げようとするのですか? –

+0

ベンチマークを実行しましたか?あなたはこれを研究しましたか? –

答えて

0

文字列がマルチバイトであるかどうかを知る方法はありますか?

mb_detect_encoding文字エンコーディングを検出

string mb_detect_encoding (string $str [, mixed $encoding_list = 
mb_detect_order() [, bool $strict = false ]]) 

http://php.net/manual/en/function.mb-detect-encoding.php

それは常にmb_stringの機能を使用しても安全ですか?

はエクスプロイト:によりエラー状態のデコーダの誤った取り扱いヒープバッファオーバーフロー

を、境界はヒープに割り当てられたバッファを効果的にバイパスされるかどうかを確認。攻撃者は、この脆弱性を悪用して、デコーダの入力を制御できる場合、ヒープの特定の領域に任意のデータを転送できます。

解決方法: バージョン5.2.8にアップグレードしてください。 4.xシリーズのメンテナンスが中止されたことに注意してください。

http://www.securiteam.com/unixfocus/6X00P0ANFM.html

それは遅くありませんか?通常の文字列関数と同じ速さで動作しますか マルチバイト文字列ではないと考えますか?

IconvにあなたはASCIIテーブルに記載されていない文字(英語&スペイン語langsを)期待していた場合、MB *メソッドを使用する必要がMBSTRINGソリューション対

https://beeznest.wordpress.com/2008/10/05/mbstring-vs-iconv-benchmarking/

+0

エンコーディングをどのように認識するのではなく、マルチバイトであるかどうかをどのように知るのですか?また、英語。 –

+0

@ J。私はまだ質問を読んでいますが、マルチバイトで言語をどのように認識しているかは不明です。コメントするのは簡単ではありませんが、このプロジェクトをgithubで見てみると、インストールとテストに時間がかかるという解決策があります。私は 'bestResults()'という名前のメソッドがあります。よろしく。 https://github.com/headmax/language-detection –

+0

@J。 Doeああ、申し訳ありませんが、クラスは、checkMultibytes https://api.cakephp.org/2.5/class-Multibyte.htmlという名前のphpcakeフレームワークで書かれていますが、ベンダーやバンドルがあれば私はうんざりですあなたのプロジェクトにインストールされます。 https://api.cakephp.org/2.5/source-class-Multibyte.html#861-877 –

0
  1. 。この場合、$ string [n]呼び出しを使用して文字列から文字を取得しないでください。
  2. mb *のメソッドは、通常、non-mb *メソッドより約〜1.5倍遅いです。しかし、それは一般的なWebタスクには本当の意味がありません。
  3. mb_detect_encodingを使用して文字セットを検出しないでください。そのようなメソッドは、ストリーム内の文字に関する推測に基づいているalgosを使用しているため、実際には不正確な場合があります。ここでの最善の解決策は、コードのすべての部分が1つの定義済みの文字セット(UTF-8または他の任意の文字セットを選択し、文字列を含むすべての内部タスクに対してのみ使用する)でのみ動作すると言うことです。この単純なルール(ファイルエディタやいくつかのクロスプラットフォームのドキュメントベースのアプリケーション)からの例外はごくわずかです。
関連する問題