ホームページ >バックエンド開発 >PHPチュートリアル >php iconv()エンコード変換エラー 不正な文字を検出しました_PHPチュートリアル

php iconv()エンコード変換エラー 不正な文字を検出しました_PHPチュートリアル

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

プロトタイプ: 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() を見てみましょう: 入力文字列処理メソッドで不正な文字が検出されました

$str = iconv('utf-8', 'gbk//ignore', unescape(isset($_get['str'])? $_get['str']:''));

ローカル テスト //ignore は、認識できない単語を無視して、エラーを報告せずに下にスクロールし続けることができますが、 //translit は、認識できない単語とその後のコンテンツをインターセプトして、エラーを報告することができます。 //無視することが必要です。
あとはオンラインに接続して結果を確認するだけです (これは良い考えではありません。マニュアルをよく読んでオンラインで検索してください) (笑)。 。 。

インターネットで次の記事を見つけたところ、mb_convert_encoding も使用できることがわかりましたが、iconv よりも効率が悪いことがわかりました。

文字列エンコーディングの変換 iconv と mb_convert_encoding の違い

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 の前にある ; を削除する必要があります。
文字列 iconv (文字列 in_charset、文字列 out_charset、文字列 str)

注:

2 番目のパラメーターは、変換先のエンコーディングを指定するだけでなく、//translit と //ignore の 2 つのサフィックスを追加することもできます
その中には:
//translit は、直接変換できない文字を 1 つ以上の近似文字に自動的に変換します。
//ignore は変換できない文字を無視し、デフォルトの効果は最初の不正な文字から切り捨てられます。
変換された文字列を返すか、失敗した場合は false を返します。

使用:

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

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");

$str = mb_convert_encoding($str, "euc-jp', "auto");


http://www.bkjia.com/PHPjc/632348.html

www.bkjia.com

http://www.bkjia.com/PHPjc/632348.html技術記事数値プロトタイプ: string iconv (string $in_charset, string $out_charset, string $str) 特に 2 番目のパラメーターの説明: iconv() を使用した出力文字エンコーディングの変換はサポートされていません...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。