ホームページ  >  記事  >  バックエンド開発  >  PHPエンコーディング変換関数mb_convert_encodingとiconv

PHPエンコーディング変換関数mb_convert_encodingとiconv

WBOY
WBOYオリジナル
2016-07-25 08:53:511058ブラウズ
  1. header("content-type: text/html; charset=utf-8");
  2. echo mb_convert_encoding("あなたは私の友達です", "utf-8", "gbk ") ;
  3. ?>
コード

をコピーして、gb2312 を big5 に変換します。

  1. header("content-type: text/html; charset=big5");
  2. echo mb_convert_encoding("あなたは私の友達です", "big5", "gb2312"); >
コードをコピー
上記の php 関数を使用するにはインストールが必要ですが、最初に 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 (文字列 in_charset、文字列 out_charset、文字列 str) 注: 変換先のエンコーディングの指定に加えて、2 番目のパラメーターで 2 つのサフィックス //translit と //ignore を追加することもできます。 //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");
  1. コードをコピー
PHPエンコーディングでmb_convert_encodingを使用する場合の小さな落とし穴 PHP プログラムで文字エンコーディングを変換するために mb_convert_encoding() メソッドを使用することは誰もがよく知っており、大量に使用されます。そして一般に、この方法は十分にうまく機能し、賞賛に値します。しかし、あるプロジェクトで utf8 を gbk に変換するためにこれを使用する必要があり、いくつかの特殊文字を変換するときに小さな問題が見つかりました。 具体的なパフォーマンスは、mb が utf8 でエンコードできるが gbk でエンコードできない文字を変換することです。 文字エンコーディングの変換プロセス中に、ターゲットのエンコーディングで表現できない文字が見つかった場合、トランスコーディング プログラムが行うべきことは、そのような文字を破棄することです。このようにして、一部のデータは失われますが、トランスコードされた文字が失われることはありません。シーケンスが使用できなくなります。 なぜ mb が上記のメソッドを破棄せずに使用する必要があるのか​​は不明です。

一時的な解決策: トランスコードされた文字列シーケンスをフィルターしてすべての x0080 文字を除外するか、エスケープする前に utf8 文字列をフィルターして、ut8 で表現できるが gbk で表現できないすべての文字を除外します。する。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。