ホームページ >バックエンド開発 >PHPチュートリアル >php iconv()エンコード変換エラー 不正な文字を検出しました_PHPチュートリアル
プロトタイプ: string iconv ( string $in_charset 、 string $out_charset 、 string $str )
特に 2 番目のパラメーターの説明:
出力文字セット
iconv() を使用して、出力文字エンコーディングでサポートされていない文字 (iconv('utf-8', 'gb2312', 'www.bKjia.c0m') など) を変換すると、次のエラー メッセージが表示されます。
通知: iconv() [function.iconv]: 入力文字列で不正な文字が検出されました ...
gb2312 は簡体字中国語を表し、「www.bKjia.c0m」などのより複雑な中国語文字や一部の特殊文字をサポートしていないため、当然エラーが発生します。
解決策は 2 つあります。1. iconv('utf-8', 'gbk', 'www.bKjia.c0m') などの出力文字エンコーディングの範囲を拡張します。gbk はより広範囲の文字をサポートしているため、正しく出力できます。
2. iconv('utf-8', 'gb2312//ignore', 'www.bKjia.c0m') のように、出力文字エンコーディング文字列の後に「//ignore」を追加します。変換するとエラーは回避されますが、正しく出力できません(つまり、空白は出力されません)。
PHP チュートリアルの iconv() を見てみましょう: 入力文字列処理メソッドで不正な文字が検出されました
ローカル テスト //ignore は、認識できない単語を無視して、エラーを報告せずに下にスクロールし続けることができますが、 //translit は、認識できない単語とその後のコンテンツをインターセプトして、エラーを報告することができます。 //無視することが必要です。
あとはオンラインに接続して結果を確認するだけです (これは良い考えではありません。マニュアルをよく読んでオンラインで検索してください) (笑)。 。 。
文字列エンコーディングの変換 iconv と mb_convert_encoding の違い
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 の前にある ; を削除する必要があります。
文字列 iconv (文字列 in_charset、文字列 out_charset、文字列 str)
2 番目のパラメーターは、変換先のエンコーディングを指定するだけでなく、//translit と //ignore の 2 つのサフィックスを追加することもできます
その中には:
//translit は、直接変換できない文字を 1 つ以上の近似文字に自動的に変換します。
//ignore は変換できない文字を無視し、デフォルトの効果は最初の不正な文字から切り捨てられます。
変換された文字列を返すか、失敗した場合は false を返します。
使用:
2. mb_convert_encoding は複数の入力エンコーディングを指定できますが、内容に応じて自動的に識別されます。ただし、実行効率は iconv よりもはるかに悪くなります。例: $str = mb_convert_encoding($str,"euc-jp","ascii,jis, euc-jp ,sjis,utf-8");「ascii,jis,euc-jp,sjis,utf-8」の順番によって効果が異なります
3. 通常の状況では、iconv を使用します。mb_convert_encoding 関数は、元のエンコーディングが特定できない場合、または変換後に iconv が正常に表示できない場合にのみ使用してください。
from_encoding は、変換前の文字コード名で指定されます。配列または文字列 (カンマ区切りの列挙リスト) が可能です。指定されていない場合は、内部エンコーディングが使用されます。
$str = mb_convert_encoding($str, "ucs-2le", "jis, eucjp-win, sjis-win");
www.bkjia.com