昨日、以前にダウンロードした大量のファイルをバッチ処理し、正規表現を使用してファイル内の主要な内容を照合し、それらを一元的に処理したいと思いました。 。ファイルを操作するときに発生する問題は、Windows オペレーティング システムのエンコーディングの問題です。
Windows (もちろん中国語版) では、ファイル名とファイルの内容のエンコーディングは gbk であり、開発プロセスでは IDE のエンコーディングは UTF-8 であることは誰もが知っています (これについては説明しません)理由などはこちら) 質問お待ちしております
エンコーディングを同じに変換する方法のみを考慮してください)、そのため、私が書いた UTF-8 エンコードされた正規パターン文字列内の中国語は、gbk エンコードされたファイル内で正しく照合できません。
最初は何も分かりませんでした。PHP スクリプト ファイルのエンコードを GBK に変更してみましたが、これでも機能しました。しかし、この方法は低すぎると思い、ニーズを満たすことができる PHP の関数を探しました。
このとき、Windowsでファイル名を処理するために使用する関数iconv()を思い出しました。その関数のプロトタイプは次のとおりです。 リーリー
私たちがよく使うのは:リーリー
ファイル名を加工するには、内容を変更せずにファイル名をgbkからUTF-8に変更します。手動翻訳を追加:
これは、iconv() 関数が処理できる最大文字数が通常のファイル名のサイズである 64 文字しかなく、ファイルの内容が明らかに 64 文字を超えていることを意味します。
他に方法がないので、他の機能を再度探す必要がありました。
mb_string 関数ライブラリを発見するまでは、この関数ライブラリは通常、phpinfo() で見つけることができます。
mb_string 関数には
mb_convert_encoding() 関数があり、文字列のエンコーディングを変更できます。その関数プロトタイプは次のとおりです。 リーリー 基本的なプロトタイプは iconv() 関数に似ていますが、出力関数のサフィックスが変更されていないことと、文字列の長さに明確な制限がない点が異なります。
$from_encoding はオプションであり、ソース エンコーディングを自動的に識別できることがわかります。
トランスコードできない文字を正確に見つけることができず、トランスコードできない文字をどのように処理するかわからないためです。
ファイル全体が mb_convert_encoding() 関数によって処理され、問題は正常に解決されました。
最後に、
mb_string 関数ライブラリを紹介します。その完全な名前は、PHP 独自の文字列関数ライブラリから拡張されたものです。関数名には、元の関数の前に「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 を返します
もちろん、さらにユニークな機能もあります~
このブログ投稿が役立つと思われる場合は、私を推薦するかフォローしてください。質問がある場合は、以下にメッセージを残してください。ありがとうございます。
http://www.bkjia.com/PHPjc/1069670.html