スクリプトからの警告と通知を解決しようとしています。スクリプトには次のものが含まれます。
$clean_string = iconv('UTF-8', 'UTF-8//IGNORE', $supplier.' => '.$product_name);
私が理解しているように、この行の目的は、スクリプトの元の作成者が意図したように、UTF-8 以外の文字を文字列から削除することですが、明らかに入力に UTF-8 以外の文字があると、iconv が不正な文字の警告をスローします。
これを解決するために、私の考えは次のようなことをすることでした:
$clean_string = iconv(mb_detect_encoding($supplier.' => '.$product_name), 'UTF-8//IGNORE', $supplier.' => '.$product_name);
しかし奇妙なことに、検出されたエンコーディングとして mb_detect_encoding() が返さUTF-8
れます!
アクセント付きの文字 e ( é
) は、この動作を引き起こす文字の例です。
検出と変換の間にマルチバイト ライブラリを混在させていることに気付きましたが、iconv ライブラリにエンコーディング検出関数が見つかりませんでした。
mb_convert_encoding() 関数を使用して文字列を UTF-8 にクリーンアップすることを検討しましたが、PHP のドキュメントでは、表現できない文字がどうなるかが明確ではありません。
私は PHP 5.2.17 を使用しており、glibc iconv 実装、ライブラリ バージョン 2.5 を使用しています。
文字列を UTF-8 にクリーンアップする方法や、この動作が発生する理由についての洞察を提供できる人はいますか?