ホームページ  >  記事  >  バックエンド開発  >  PHP 文字エンコードを gb2312 から utf8_PHP に変換するチュートリアル

PHP 文字エンコードを gb2312 から utf8_PHP に変換するチュートリアル

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

PHP では、通常、iconv と mb_convert_encoding を使用して文字エンコーディングを変換しますが、mb_convert_encoding は変換パフォーマンスの点で iconv よりもはるかに劣ります。

文字列 iconv (文字列 in_charset、文字列 out_charset、文字列 str)
注: 変換先のエンコーディングの指定に加えて、2 番目のパラメーターでは、//TRANSLIT と //IGNORE の 2 つの接尾辞を追加することもできます。//TRANSLIT は、直接変換できない文字を 1 つ以上の近似文字に自動的に変換します。 //IGNORE は変換できない文字を無視し、デフォルトの効果は最初の不正な文字から切り捨てられます。
変換された文字列を返すか、失敗した場合は FALSE を返します。

string mb_convert_encoding ( string str, string to_encoding [,混合 from_encoding] )
まず mbstring 拡張ライブラリを有効にし、php.ini の extension=php_mbstring.dll の前にある ; を削除する必要があります。 mb_convert_encoding は複数の入力エンコーディングを指定できますが、内容に基づいて自動的に識別されますが、実行効率は iconv よりもはるかに悪くなります。
使用:

iconv が文字「-」を gb2312 に変換するときにエラーが発生することが判明しました。ignore パラメータがないと、この文字に続くすべての文字列を保存できません。この「-」はどうやってもうまく変換できず出力できません。 なお、mb_convert_encoding にはこのバグはありません

通常は、iconv を使用します。mb_convert_encoding 関数は、元のエンコーディングが特定できない場合、または変換後に iconv が正常に表示できない場合にのみ使用してください。

コードは次のとおりですコードをコピー/** * gbk または gb2312 でエンコードされた文字列を自動的に判断して utf8 に変換します コードは次のとおりです
*入力文字列のエンコードタイプを自動的に判断できます。UTF-8の場合は変換する必要はありません。それ以外の場合はUTF-8文字列に変換されます

*サポートされている文字エンコーディングの種類は、utf-8、gbk、gb2312 です
*@$str:string 文字列
*/
関数 yang_gbk2utf8($str){
$charset = mb_detect_encoding()($str,array('UTF-8','GBK','GB2312')); $charset = strto lower($charset); If('cp936' == $charset){
$charset='GBK'; }
If("utf-8" != $charset){
$str = iconv($charset,"UTF-8//IGNORE",$str); }
$str を返します
}




次に、文字エンコーディングを変換する際の問題について見ていきます

mb_detect_encoding($str); 関数を使用するには、php extension=php_mbstring.dll 拡張子を開く必要があります。

コードをコピー

$str="テスト中"; エコー $cha;コードは次のとおりです
$cha=mb_detect_encoding($str); ?>

gb2312のページで入力したのですが、出力結果がUTF-8になってしまい非常におかしく、原因はまだ分かりません。

一律にUTF-8エンコーディングに変換したい場合は、以下の方法を使用してください

コードをコピー

$str="テスト中"; $s = iconv($cha,"UTF-8",$str); ?>
$cha=mb_detect_encoding($str); var_dump($s);

返された結果:
文字列(0) 「」
なぜこんなことが起こるのか本当に不思議です。

を使用してください
コードは次のとおりです コードをコピー
$str="テスト中";
$cha=mb_detect_encoding($str);
$s = iconv("GB2312","UTF-8",$str);
var_dump($s);
?>


返された結果は正しいです。関数 mb_detect_encoding($str) が依然として不正確であることがわかりました。その理由はわかりません。
関数 string mb_convert_encoding ( string $str , string $to_encoding [,mixed $from_encoding ] )

指定したエンコーディングの文字列に変換できる、例を書きました

コードは次のとおりです コードをコピー

$a="大丈夫です";
echo mb_convert_encoding ($a,'UTF-8');
?>

結果は次のとおりです:
??枞?枞?
ここで問題となるのは、異なる文字列エンコーディングを UTF-8 に変換する場合、その変更が事前にわかっていれば iconv を使用できるかということですが、エンコーディングがわからない場合はどうすればよいでしょうか?

問題 3: iconv の問題、変換された文字列、最初のバイトのエンコーディングが特定の数値より大きい場合、空が返されます。

例:

コードは次のとおりです コードをコピー
$str=chr(254)."テスト".chr(254);
$s = iconv("GB2312","UTF-8",$str);
var_dump($s);
?>

戻る
文字列(0) 「」

mb_convert_encodingの使用方法については、公式Webサイトをご覧ください:

http://cn.php.net/manual/en/function.mb-convert-encoding.php

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 [,混合 from_encoding] )
まず mbstring 拡張ライブラリを有効にし、php.ini の extension=php_mbstring.dll の前にある ; を削除する必要があります。 mb_convert_encoding は複数の入力エンコーディングを指定できますが、内容に基づいて自動的に識別されますが、実行効率は iconv よりもはるかに悪くなります。
文字列 iconv (文字列 in_charset、文字列 out_charset、文字列 str)

注: 変換先のエンコーディングの指定に加えて、2 番目のパラメーターでは、//TRANSLIT と //IGNORE の 2 つの接尾辞を追加することもできます。//TRANSLIT は、直接変換できない文字を 1 つ以上の近似文字に自動的に変換します。 //IGNORE は変換できない文字を無視し、デフォルトの効果は最初の不正な文字から切り捨てられます。

変換された文字列を返すか、失敗した場合は FALSE を返します。

使用:

iconv が文字「-」を gb2312 に変換するときにエラーが発生することが判明しました。ignore パラメータがないと、この文字に続くすべての文字列を保存できません。この「-」はどうやってもうまく変換できず出力できません。 なお、mb_convert_encoding にはこのバグはありません

通常の状況では、iconv を使用します。mb_convert_encoding 関数は、元のエンコーディングが特定できない場合、または変換後に 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"); ?>




これは入出力の文字エンコーディングに応じて変換できます

コードは次のとおりです

コードをコピー

関数 phpcharset($data, $to) { if(is_array($data)) { foreach($data as $key => $val) { $data[$key] = phpcharset($val, $to);
}

} その他 {
$encode_array = array('ASCII', 'UTF-8', 'GBK', 'GB2312', 'BIG5');
$encoded = mb_detect_encoding($data, $encode_array);
$to = strtoupper($to);
if($encoded != $to) {
$data = mb_convert_encoding($data, $to, $encoded);
}
}
$data を返します;
}
?>





http://www.bkjia.com/PHPjc/632791.htmlwww.bkjia.com

tru​​e

技術記事 PHP では、通常、iconv と mb_convert_encoding を使用して文字エンコーディングを変換しますが、mb_convert_encoding は変換パフォーマンスの点で iconv よりもはるかに劣ります。 string iconv ( string...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。