この記事の例では、PHP の iconv を使用した中国語の切り捨ての問題の解決策について説明します。皆さんの参考に共有してください。具体的な分析は次のとおりです:
今日は、curlメソッドを使って相手のページのhtmlを取得して解析し、必要なデータを抽出してデータベースに保存するという非常にシンプルな収集プログラムを作りました。
相手のページは GB2312 でエンコードされているのに対し、ローカルのページは UTF-8 エンコードを使用しているためです。したがって、収集後にエンコーディングの変換が必要です。
エンコード変換にiconvメソッドを使用する
iconv — 必要な文字エンコーディングに従って文字列を変換します
string iconv ( string $in_charset 、 string $out_charset 、 string $str )
文字列 str を in_charset から out_charset に変換します。
変換方法は非常に簡単で、iconvメソッドを直接使用するだけです
いくつかのページをテストしましたが、すべて正常に収集されました。ただし、その後のコレクションでは、いくつかのページが不完全に収集されました。
まず正則化に誤りがないかを検討し、確認後に問題を解消します。調査の結果、iconv トランスコード後のコンテンツは、収集されたコンテンツよりもかなり短いことが判明しました。
Apache ログを確認し、次のプロンプトを確認します。 通知: iconv(): 入力文字列で不正な文字が検出されました。
マニュアルを確認し、次の指示を参照してください
out_charset の後に //TRANSLIT という文字列を追加すると、音訳機能が有効になります。これは、ターゲット文字セットで文字を表現できない場合、1 つ以上の類似した文字で近似できることを意味します。
文字列 //IGNORE を追加すると、対象の文字セットで表現できない文字は警告なしに破棄されます。 それ以外の場合、 str は最初の無効な文字から切り捨てられ、 E_NOTICE が発生します。
iconv が認識できないコンテンツに遭遇すると、最初の認識できない文字から切り捨てられ、E_NOTICE が生成されることがわかりました。したがって、次のコンテンツは破棄されます。
出力文字セットの後に //IGNORE を追加すると、後続のコンテンツが切り捨てられたり破棄されたりすることなく、認識できないコンテンツのみが破棄されます。
プログラムを修正した後はすべて正常です
ヒント: iconv を使用する場合、UTF-8 エンコードを使用したい場合は、UTF8 ではなく UTF-8 を使用してください。UTF8 を使用するサーバーでは問題が発生する可能性があります。
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。