PHP は mb_string 関数ライブラリを使用して Windows に関連する中国語の文字を処理します
昨日、以前にダウンロードした大量のファイルをバッチ処理し、正規表現を使用してファイル内の主要な内容を照合し、それらを一元的に処理したいと思いました。ファイルを操作するときに発生する問題は、Windows オペレーティング システムのエンコーディングの問題です。
Windows (もちろん中国語版) では、ファイル名とファイルの内容が gbk でエンコードされていることは誰もが知っています。開発プロセス中、IDE のエンコードは UTF-8 です (その理由などについてはここでは説明しません) 、
エンコーディングを同じに変換する方法のみを考慮してください)、そのため、私が書いた UTF-8 エンコードされた正規パターン文字列内の中国語は、gbk エンコードされたファイル内で正しく照合できません。
最初は何も分かりませんでした。PHP スクリプト ファイルのエンコードを GBK に変更してみましたが、これでも機能しました。しかし、この方法は低すぎると思い、ニーズを満たすことができる PHP の関数を探しました。
今回、Windowsでファイル名を処理するときによく使っていた関数iconv()を思い出しました。その関数プロトタイプは次のとおりです。 リーリー
私たちがよく使うのは:リーリー
ファイル名を加工するには、内容を変更せずにファイル名をgbkからUTF-8に変更します。手動翻訳を追加:
出力文字列 $out_charset の後に //TRANSLIT を追加すると、つまり $out_charset='utf-8//TRANSLIT' になり、UTF-8 に変換できない文字が見つかったときに、プログラムは自動的にそれを文字列に置き換えます。類似した文字を含む UTF
ただし、この関数を使用して処理すると、結果は次のようになります:
これは、iconv() 関数が処理できる最大文字数が通常のファイル名のサイズである 64 文字しかなく、ファイルの内容が明らかに 64 文字を超えていることを意味します。
他に方法がないので、他の機能を再度探す必要がありました。
mb_string 関数ライブラリを発見するまでは、この関数ライブラリは通常、phpinfo() で見つけることができます。
mb_string 関数には mb_convert_encoding() 関数があり、文字列のエンコーディングを変更できます。その関数のプロトタイプは次のとおりです。 リーリー
基本的なプロトタイプは iconv() 関数に似ていますが、出力関数の接尾辞が変更されていないことと、文字列の長さに明確な制限がない点が異なります。
$from_encoding はオプションであり、ソース エンコーディングを自動的に識別できることがわかります。
トランスコードできない文字を正確に見つけることができず、トランスコードできない文字をどのように処理するかわからないためです。
ファイル全体が mb_convert_encoding() 関数によって処理され、問題は正常に解決されました。
最後に、mb_string 関数ライブラリを紹介します。その正式名は、Multibyte String です。そのメソッドの多くは、元の関数の前に「mb_」が追加されています。元の関数の関数、これらの関数、さらにオプションのパラメーター $encoding をオプションのパラメーターの最後に追加します。このパラメーターは、関数が文字列を処理するために使用するエンコード方法を指定できます。
たとえば、strpos() 関数は、別の文字列内の文字列の位置を見つけます。
strpos("Welcome to visit","Ask",0) は、スクリプトが UTF-8 エンコードされており、文字列を UTF-8 エンコードに変換した後、各中国語文字が 3 文字を占めるため、結果 12 を返します。
mb_strpos() 関数では、mb_strpos("Welcome to visit", "Ask", 0, 'utf-8') は 4 を返し、文字列が UTF-8 に変換されたかのように実行されます。
そして mb_strpos("ようこそ","質問",0,'gbk') は 6 を返します
もちろん、さらにユニークな機能もあります~
以下では、Windows環境でPHP Mb_Stringを有効にする方法を紹介します 数日前、Phpプログラムを実行し、文字エンコーディングを変換する必要がありましたが、サーバーを確認したところ、Mb_String拡張子がサポートされていないと言われました。ファイルphp_mbstring.dllがPhp拡張ライブラリに含まれていることを確認しました。
以下はそれを開く方法を説明します
1. ファイル php_mbstring.dll が Windows/system32 にあることを確認します。ない場合は、Php インストール ディレクトリ拡張子から Windows/system32 にコピーします。
2. Windows ディレクトリで php.ini を見つけ、編集のために開き、mbstring.dll を検索して、
を見つけます。 ;extension=php_mbstring.dll
次に、前にある「;」記号を削除して、コンポーネントのサポートをオンにします
3. PHP サービスを再起動します (そうでない場合は、コンピューターを再起動できます)
4.完了
。