web-dev-qa-db-ja.com

iconv UTF-8 // IGNOREはまだ「不正な文字」エラーを生成します

_$string = iconv("UTF-8", "UTF-8//IGNORE", $string);
_

このコードは無効なUTF-8文字を削除すると思いましたが、[E_NOTICE] "iconv(): Detected an illegal character in input string"を生成します。何が欠けていますか、不正な文字から文字列を適切に削除するにはどうすればよいですか?

14
Znarkus

出力文字セット(2番目のパラメーター)は、入力文字セット(最初のパラメーター)とは異なる必要があります。それらが同じである場合、文字列に不正なUTF-8文字が含まれていると、iconvは、入力文字セットに従ってそれらを不正であるとして拒否します。

5
msgmash.com

不正な文字を含むUTF-8文字列を修正する2つの方法を知っています。

  1. 不正な文字は疑問符( "?")に置き換えられます:

$message = mb_convert_encoding($message, 'UTF-8', 'UTF-8');

  1. 不正な文字は削除されますL

$message = iconv('UTF-8', 'UTF-8//IGNORE', $message);

2番目の方法は実際に問題で説明されました。しかし、私の場合は_E_NOTICE_は生成されません。 error_reporting(E_ALL);を使用してさまざまな破損したUTF-8文字列でテストしたところ、常に期待どおりの結果が得られました。 2012年以降、何かが変更された可能性があります。PHP 7.2.9Winでテストしました。

0
Paul Melekhov