_$string = iconv("UTF-8", "UTF-8//IGNORE", $string);
_
このコードは無効なUTF-8文字を削除すると思いましたが、[E_NOTICE] "iconv(): Detected an illegal character in input string"
を生成します。何が欠けていますか、不正な文字から文字列を適切に削除するにはどうすればよいですか?
出力文字セット(2番目のパラメーター)は、入力文字セット(最初のパラメーター)とは異なる必要があります。それらが同じである場合、文字列に不正なUTF-8文字が含まれていると、iconv
は、入力文字セットに従ってそれらを不正であるとして拒否します。
不正な文字を含むUTF-8文字列を修正する2つの方法を知っています。
$message = mb_convert_encoding($message, 'UTF-8', 'UTF-8');
$message = iconv('UTF-8', 'UTF-8//IGNORE', $message);
2番目の方法は実際に問題で説明されました。しかし、私の場合は_E_NOTICE
_は生成されません。 error_reporting(E_ALL);
を使用してさまざまな破損したUTF-8文字列でテストしたところ、常に期待どおりの結果が得られました。 2012年以降、何かが変更された可能性があります。PHP 7.2.9Winでテストしました。