ホームページ >バックエンド開発 >PHPチュートリアル >gbk中国語分割時の文字化け問題を解決する、gbk中国語分割時の文字化け_PHPチュートリアル
最近、「韬(タオ)」という魔法の言葉に出会いました。
具体的なプロセスは次のとおりです:
リーリーこのセグメンテーションの結果を取得します。
想像に反して、結果は実際には次のようになります:
リーリー文字化けが発生し、空の要素が不可解に表示されました。
その理由は、文字「韬」の gbk エンコードが 8f7c で、| の ASCII が 7c であることが判明したため、explode は「韬」の 2 番目の ASCII を | としてカットします。
全角問題なのでmbstringで解決しました。
残念ながら、PHPにはmb_explodeのような関数はありません。検索したところ、mb_splitを見つけました。
リーリーエンコーディングを宣言する場所がありません。よく見ると、mb_regex_encoding 宣言によってエンコードされていることがわかります。
そこで私は次のコードを書きました:
リーリーその結果、php はエラーを報告し、mb_regex_encoding が gbk を認識しませんでした。恥ずかしいことです。
次に、それを使用して次のことを確認します:
リーリー結果:
リーリーこの方法は役に立たないことがわかりました。 、
その理由は? 「Tao」という単語は GB2312 のコード セットにはありません。 ! ! ! !ただし、この関数はこの文字のエンコーディング セット (GBK、GB18030) をサポートしていません。 ! ! ! !
これは使いにくいので、汎用の正規表現でも大丈夫かもしれません。したがって、次のコードが得られました:
リーリー結果:
リーリーはい、考えすぎました。
ここで、正規表現を使用してこのシーンを記述する方法を学習しましょう。
参考までに、Bird兄さんのブログ:GBK中国語分割時の文字化け問題の解決方法。残念ながら、正規表現能力が比較的低い私には、適切な正規表現がまだ思いつきません(この正規表現を思いついた達人がいたら教えてほしいです)。
よく考えた結果、substr を使用するしかありません:
リーリーテストコード:
リーリー結果:
リーリーこのようにして、正しい結果を得ることができます。