説明1:
PHPには文字列という概念があります。
文字列では、各文字のサイズはバイトです(PHPと比較すると、Javaの各文字はUTF8文字であるCharacterであり、C言語の各文字はコンパイル時に選択できます)。
バイトには、ABC、123、abc などの ASCII コード文字と、キャリッジ リターン、バックスペースなどのいくつかの特殊文字があります。
表示できない特殊文字が多数あります。つまり、表示方法に標準はありません。たとえば、コード 65 からは文字 A が使用され、コード 97 からは文字 a が使用されます。バックスペースは、ある場所では記号として表示され、ある場所では記号として表示されます。実際には前の文字を置き換えます。1 つの文字が返されます。
PHPはCベースなので、Cと比較する記述が多いです。 C 文字列では、文字列をコード 0 で終了するのが古典的な定義です。したがって、このような文字列を想定すると、その中の 3 文字のエンコーディングはそれぞれ 97、0、97 になります。次に、C の str_replace に相当する関数があり、それを使用して 97 を 98 に置き換えることができる場合、この関数が 0 を読み取ると終了とみなされ、98,0,97 が得られます。同様に、PHP の str_replace はバイナリ セーフであるため、この 0 は特別な終了記号とは見なされず、結果は 98, 0, 98 になります。
【バイナリセキュリティ】PHPドキュメントでは、基本的にこれを意味します:C言語の同様の機能を持つ関数は一部の文字を特別に処理しますが、PHPのこの関数はすべての文字を同等に扱うため、特殊文字が影響することを心配する必要はありません特に 0 文字のエンコードについては心配する必要はありません。
説明 2:
c の strlen 関数は、特殊文字に依存しているため、バイナリ セーフではありません。