PHPでは、文字列を処理する場合、文字列から特定の部品を削除する必要があることがよくあります。 MB_STRSTR()関数は、非ASCII文字を処理するときに特に役立つマルチバイト文字セット処理機能です。この記事では、MB_STRSTR()関数を使用して、指定された部品を文字列から削除する方法を紹介します。
MB_STRSTR()はマルチバイトストリング関数であり、通常のSTRSTR()関数に似ていますが、マルチバイト文字セット(UTF-8、Shift-JISなど)用に設計されています。したがって、英語以外の文字を含む文字列を処理する必要がある場合、 MB_STRSTR()はより安定して信頼性が高くなります。
<span><span><span class="hljs-title function_ invoke__">mb_strstr</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$needle</span></span><span>, </span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-variable">$before_needle</span></span><span> = </span><span><span class="hljs-literal">false</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
$ haystack :検索するターゲット文字列。
$針:見つかるサブストリング。
$ before_needle (optional): trueに設定した場合、針の前に部分を返し、それ以外の場合は針の後に部分を返します。
$エンコード(オプション):文字エンコードを指定し、デフォルトはMB_INTERNAL_ENCODING()です。
文字列があり、その一部を削除したいとします。 MB_STRSTR()で部品を見つけてから、文字列操作を介して削除できます。
次の文字列があるとします。
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"私は勉強するのが好きですPHPプログラミング"</span></span><span>;
</span></span>
「学習」部分を削除することを望んでいます。最初にMB_STRSTR()を使用して、このサブストリングの位置を見つけてから、対応する処理を実行できます。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"私は勉強するのが好きですPHPプログラミング"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"勉強"</span></span><span>;
</span><span><span class="hljs-comment">// 使用mb_strstr探す"勉強"どこに表示されるか</span></span><span>
</span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_strstr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>);
</span><span><span class="hljs-comment">// 見つかった場合"勉強",この一部を削除します</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$position</span></span><span> !== </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-comment">// 文字列を削除します"勉強"一部</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_substr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-title function_ invoke__">mb_strpos</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>)) . </span><span><span class="hljs-title function_ invoke__">mb_substr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-title function_ invoke__">mb_strpos</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>) + </span><span><span class="hljs-title function_ invoke__">mb_strlen</span></span><span>(</span><span><span class="hljs-variable">$needle</span></span><span>));
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"没有找到指定的一部"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
<span><span>私は好きですPHPプログラミング
</span></span>
サブストリング後の部品のみを削除する場合は、 MB_STRSTR()関数のbeforid_needleパラメーターを使用できます。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"私は勉強するのが好きですPHPプログラミング"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"勉強"</span></span><span>;
</span><span><span class="hljs-comment">// 得る"勉強"前的一部</span></span><span>
</span><span><span class="hljs-variable">$before</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_strstr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$before</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
<span><span>私は好きです
</span></span>
文字列から複数の異なるサブストリングを削除する必要がある場合は、 MB_STRSTR()およびその他の文字列操作関数を組み合わせて使用できます。ループと正規表現を通じて、タスクを効率的に完了できます。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"私は勉強するのが好きですPHPプログラミング和Web発達"</span></span><span>;
</span><span><span class="hljs-variable">$needles</span></span><span> = [</span><span><span class="hljs-string">"勉強"</span></span><span>, </span><span><span class="hljs-string">"Web"</span></span><span>];
</span><span><span class="hljs-comment">// 複数のサブストリングを削除します</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$needles</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$needle</span></span><span>) {
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_replace</span></span><span>(</span><span><span class="hljs-variable">$needle</span></span><span>, </span><span><span class="hljs-string">""</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$str</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
<span><span>私は好きですPHPプログラミング和発達
</span></span>
MB_STRSTR()は、マルチバイト文字セットに最適化されています。通常、中国語、日本、韓国語などを含むキャラクターセットを扱う場合、従来のStrSTR()よりも優れています。
マルチバイト文字を処理するときは、正しいエンコード形式が指定されていることを確認してください。そうしないと、結果が不正確である可能性があります。
場合によっては、 mb_substr()とmb_strpos()を組み合わせて使用すると、文字列の削除位置を正確に制御できます。
MB_STRSTR()関数を介して、特に非常に重要な効果があるマルチバイト文字セットシナリオで、文字列から指定された部分を簡単に削除できます。これらのテクニックを理解して習得することで、文字列を扱うときに効率的になるだけでなく、いくつかの一般的なエンコードの問題を避けます。