ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルの iconv を使用した中国語の切り捨ての問題の解決策

PHP_PHP チュートリアルの iconv を使用した中国語の切り捨ての問題の解決策

WBOY
WBOYオリジナル
2016-07-13 10:07:10974ブラウズ

iconvを使用したPHPの中国語切り捨て問題の解決策

この記事では、iconvを使用したPHPの中国語切り捨て問題の解決策を主に紹介し、中国語切り捨て問題の原因と具体的な解決策をより詳細に分析します。参考値が必要な方はぜひ参考にしてください

この記事の例では、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メソッドを直接使用するだけです

?

1

2

3

$content = iconv('GB2312', 'UTF-8', $content); //$content は収集されたコンテンツです

?>

いくつかのページをテストしましたが、すべて正常に収集されました。ただし、その後のコレクションでは、いくつかのページが不完全に収集されました。
まず正則化に誤りがないかを検討し、確認後に問題を解消します。調査の結果、iconv トランスコード後のコンテンツは、収集されたコンテンツよりもかなり短いことが判明しました。
Apache ログを確認し、次のプロンプトを確認します。 Notice: iconv(): 入力文字列で不正な文字が検出されました。

マニュアルを確認し、次の指示を参照してください

out_charset の後に //TRANSLIT という文字列を追加すると、音訳機能が有効になります。これは、文字がターゲット文字セットで表現できない場合、1 つ以上の類似した文字で近似できることを意味します。

文字列 //IGNORE を追加すると、対象の文字セットで表現できない文字は警告なしに破棄されます。 それ以外の場合、 str は最初の無効な文字から切り捨てられ、 E_NOTICE が発生します。

iconv が認識できないコンテンツに遭遇すると、最初の認識できない文字から切り捨てられ、E_NOTICE が生成されることがわかりました。したがって、次のコンテンツは破棄されます。

出力文字セットの後に //IGNORE を追加すると、後続のコンテンツが切り捨てられたり破棄されたりすることなく、認識できないコンテンツのみが破棄されます。

プログラムを修正した後はすべて正常です

?

1

2

3

$content = iconv('GB2312','UTF-8//IGNORE',$content);//$content は収集されたコンテンツです

?>

ヒント: iconv を使用する場合、UTF-8 エンコードを使用したい場合は、UTF8 ではなく UTF-8 を使用してください。UTF8 を使用するサーバーでは問題が発生する可能性があります。

この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/956984.html技術記事この記事では、iconv を使用した PHP の中国語の切り捨て問題の解決策を主に紹介し、例の形式で中国語の切り捨て問題を詳細に分析します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。