重複の可能性:
PHP: utf-8 文字列の無効な文字を置き換えます
次の表示 SUB のように、無効な文字 (UTF-8 ではない) を含む文字列があります。
ある種の外国の無効な文字だと思います。
文字列に有効な UTF-8 文字のみを使用していることを確認するために、PHP で文字列を取得して使用する方法はありpreg_replace
ますか?
ありがとう。
まず、無効な UTF-8 文字はありません。無効な UTF-8 バイトとバイト シーケンスがあります。これは、誰かがサーバーでエンコーディング攻撃を試みていることを意味します。これらはmb_check_encoding
次の入力データで検証でき、有効な UTF-8 を取得できない場合はすぐに 400 Bad Request で失敗します。
あなたが持っているのは、有効な文字ですが印刷できないSUBSTITUTE制御文字だけです。
本来は、文字化けまたは無効な文字が受信されたことを示す送信制御文字として使用することを目的としていました。それが提供するエラーの帯域内シグナリングが不要な場合、特にエラー検出と訂正の堅牢な方法が使用される場合、またはエラーが文字を使用して作成するのに十分なほどまれであると予想される場合、他の目的に使用されることがよくあります。他の目的をお勧めします。
この正規表現を使用してそれを取り除くことができます (およびその他のいくつか):
$reg = '/(?![\r\n\t])[\p{Cc}]/u';
preg_replace( $reg, "", $str );
関数はこれmb_check_encoding
を実行できる必要があります。
mb_check_encoding("Jetzt gibts mehr Kanonen", "UTF-8");
注:私はこれをテストしていません。