ホームページ >バックエンド開発 >PHPチュートリアル >PHP は mb_string 関数ライブラリを使用して Windows に関連する中国語の文字を処理します。_PHP チュートリアル

PHP は mb_string 関数ライブラリを使用して Windows に関連する中国語の文字を処理します。_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 09:05:20853ブラウズ

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
  • 出力文字列 $out_charset の後に //IGNORE を追加すると、つまり $out_charset='utf-8//IGNORE' となり、UTF-8 に変換できない文字が見つかったときに、プログラムはこの文字を自動的にスキップします。
  • 何も追加しない場合、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

tru​​ehttp://www.bkjia.com/PHPjc/1069670.html技術記事 PHP は mb_string 関数ライブラリを使用して、Windows に関連する中国語の文字を処理します。昨日、以前にダウンロードした大量のファイルをバッチ処理し、正規表現を使用してファイル内の主要な内容を照合し、それらを一元的に処理したいと思いました。ファック...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。