iconv 関数ライブラリは、さまざまな文字セット間の変換を完了することができ、PHP プログラミングに不可欠な基本関数ライブラリです。
1. libiconv 関数ライブラリ http://ftp.gnu.org/pub/gnu/libiconv-1.9.2.tar.gz をダウンロードします。
2. tar -zxvf libiconv-1.9.2.tar.gz を解凍します。 ;
3. libiconv をインストールします #configure --prefix=/usr/local/iconv #make
#make install
4. Windows で php を再コンパイルし、コンパイルパラメータ --with-ic/local/iconv を追加します
最近泥棒プログラムを作成するには、iconv 関数を使用して、キャプチャした utf-8 でエンコードされたページを gb2312 に変換する必要があります。iconv 関数を使用してキャプチャしたデータをトランスコードするだけで、理由もなくデータが少なくなることがわかりました。しばらく落ち込んでいましたが、インターネットで情報を調べたところ、これは iconv 関数のバグであることがわかりました。 iconv は文字「—」を gb2312 に変換するときにエラーを起こします
解決策は非常に簡単です。変換する必要があるエンコーディングの後に「//IGNORE」を追加します。これは、iconv 関数の 2 番目のパラメーターです。以下:
以下は引用内容です:
コードをコピーします
コードは次のとおりです:iconv("UTF-8","GB2312//IGNORE",$data)
ignore の意味変換中のエラーを無視するため、ignore パラメータがない場合、この文字に続くすべての文字列は保存できません。
コードは次のとおりです:echo $str= 'こんにちは、ここでコーヒーを販売しています!'
echo '
'; (' GB2312', 'UTF-8', $str); //文字列エンコーディングを GB2312 から UTF-8 に変換します
echo '
'
echo iconv_substr($str, 1, 1, ' UTF-8'); //バイト数ではなく文字数で切り捨てる
print_r(iconv_get_encoding()) //現在のページのエンコード情報を取得する
echo iconv_strlen($str, 'UTF-8');エンコードされた文字列の長さ
// は次のようにも使用できます
$content = iconv("UTF-8","gbk//TRANSLIT",$content);
;
iconv は php のデフォルトの機能ではなく、デフォルトでインストールされるモジュールでもあります。使用する前にインストールする必要があります。
Windows2000+phpの場合は、php.iniファイルを変更して、extension=php_iconv.dllの前の「;」を削除できます。同時に、元のphpインストールファイル内のiconv.dllをコピーする必要があります。 winnt/system32 (DLL がこのディレクトリを指している場合)
Linux 環境では、静的インストールを使用し、configure で iconv 項目を参照できるように追加の項目 --with-iconv を追加します。 (Linux7.3+Apache4.06+php4.3.2)、
ダウンロード: ftp://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.8.tar.gz
インストール:
#cp libiconv-1.8。 tar.gz /usr/local/src
#tar zxvf lib*
#./configure --prefix=/usr/local/libiconv
#make
#make install
Compile php
#./configure --prefix=/ usr/local/php4.3.2 --with-ic/local/libiconv/
簡単な使用例:
echo iconv("gb2312","ISO-8859-1","we"); ?>
PHP の mb_convert_encoding 関数と iconv 関数の概要
mb_convert_encoding この関数はエンコーディングを変換するために使用されます。以前はプログラムコーディングの概念が理解できませんでしたが、今では少し理解できるようになりました。
ただし、一般的に英語にはエンコードの問題はなく、中国語のデータのみにこの問題が発生します。たとえば、Zend Studio または Editplus を使用してプログラムを作成する場合、データをデータベースに入力する必要があり、データベース エンコードが utf8 である場合は、データをエンコードして変換する必要があります。そうでない場合は、データをエンコードして変換する必要があります。データベースに入るときに文字化けします。
mb_convert_encoding の公式の使用法を参照してください:
http://cn.php.net/manual/zh/function.mb-convert-encoding.php
GBK を UTF-8 に変換する
echo mb_convert_encoding("あなたは私の友達です", "UTF-8", "GBK");
?>
別の GB2312 から Big5 へ
< ; ? php
header("content-Type: text/html; charset=big5");
echo mb_convert_encoding("You are my friends", "big5", "GB2312");
?> を使用します。インストールする必要がありますが、最初に mbstring 拡張ライブラリを有効にする必要があります。
PHP の別の関数 iconv も文字列エンコーディングの変換に使用され、その関数は上記の関数と似ています。
以下に詳細な例をいくつか示します:
iconv — 文字列を要求された文字エンコーディングに変換します
(PHP 4 >= 4.0.5, PHP 5)
mb_convert_encoding — 文字エンコーディングを変換します
(PHP 4 >= 4.0.6, PHP 5) )
使用法:
string mb_convert_encoding ( string str, string to_encoding [,mixed from_encoding] )
まず mbstring 拡張ライブラリを有効にし、php.ini の extension=php_mbstring.dll の前にある ; を削除する必要があります
mb_convert_encoding で指定できる複数のタイプの入力エンコーディング、内容に基づいて自動的に識別されますが、実行効率は iconv よりもはるかに劣ります
string iconv (string in_charset, string out_charset, string str)
注: エンコーディングの指定に加えて、2 番目のパラメーター//TRANSLIT と //IGNORE の 2 つのサフィックスを追加することもできます。 //TRANSLIT は、直接変換できない文字を 1 つ以上の近似文字に自動的に変換します。 //IGNORE は、変換できない文字を無視します。デフォルトでは、最初の不正な文字から切り捨てられます。
変換された文字列、または失敗した場合は FALSE を返します。
使用:
iconv は文字「-」を gb2312 に変換するときにエラーが発生することがわかります。ignore パラメーターがないと、この文字に続くすべての文字列を保存できません。この「-」はどうやってもうまく変換できず出力できません。 なお、mb_convert_encoding にはこのバグはありません
iconv 関数は、元のエンコーディングが特定できない場合、または変換後に iconv が正常に表示されない場合にのみ使用されます
from_encoding を文字コード名で指定します。配列または文字列 - カンマ区切りの列挙リストにすることができます。指定されていない場合は、
/* JIS、eucjp-win、sjis-win からエンコードを自動検出し、str を UCS- に変換します。 2LE * /
$str = mb_convert_encoding($str, “UCS-2LE”, “JIS, eucjp-win, sjis-win”)
/* 「auto」は「ASCII,JIS,UTF-8,EUC」に展開されます。 -JP ,SJIS” */
$str = mb_convert_encoding($str, “EUC-JP”, “auto”)
例:
$content = iconv(”GBK”, “UTF-8″, $content);
$ content = mb_convert_encoding($content, "UTF-8","GBK");
PHP で iconv 関数を使用するときに見落としやすいパラメーター
今日、コンテンツのキャプチャを処理するときに、エンコード変換に iconv を使用するときに発見しました。文字セットに問題があるのではないかと思い、マニュアルを確認したところ、iconv 関数にはパラメータが 3 つしかありませんでした。 、それは機能しないようです。その後、インターネットで調べたところ、誰かがそれを実装できると言いましたが、最終的には、ターゲットコードの末尾にマークを追加できると英語の説明に記載されていることがわかりました。 :「TRANSLIT」、どうやって付け加えるのですか?最初に「//」が追加されていることがわかり、これは非常に憂鬱です
プロトタイプ: $txtContent = iconv("utf-8",'GBK',$txtContent);
特別なパラメーター: iconv( "UTF-8" ,"GB2312//IGNORE",$data)
2 つのオプションの補助パラメータ: TRANSLIT と IGNORE (IGNORE は、変換できないものに遭遇した場合にスキップすることを意味します)。説明
string iconv ( string in_charset, string out_charset, string str )
文字列 str に対して in_charset から out_charset への文字セット変換を実行します。
文字列 //TRANSLIT を out_charset に追加した場合は、変換が失敗した場合に FALSE を返します。これは、文字がターゲットの文字セットで表現できない場合、文字列 //IGNORE を追加すると、その文字を 1 つまたは複数の類似した文字で近似できることを意味します。それ以外の場合、str は最初の不正な文字から切り取られます。
以上、PHPにおけるround関数の使い方とiconv関数の使い方を紹介しましたが、PHPチュートリアルに興味のある友人の参考になれば幸いです。