現在の位置: ホーム> 最新記事一覧> StriposとMB_Striposの違いは何ですか?

StriposとMB_Striposの違いは何ですか?

M66 2025-05-31

PHPでは、 StripOSMB_STRIPOSはどちらもサブストリングの位置を見つけるために使用される機能ですが、大きな違いがあります。この記事では、それらの違い、適用可能なシナリオ、パフォーマンスの違いについて詳細に説明します。

1。ストリップMB_STRIPOSの定義

  • Stripos :これは、文字列が最初に別の文字列に表示される場所を見つけるためのPHPに組み込み関数です。それは症例感受性であり、通常のASCII文字列に適した単一バイトエンコードに基づいています。

     $haystack = "Hello world!";
    $needle = "world";
    $pos = stripos($haystack, $needle);  // 消す 6
    
  • MB_STRIPOS :この関数は、マルチバイト文字列拡張(MBSTRING)に由来しています。その機能はStriposに似ています。また、サブストリングの位置を見つけるためにも使用されており、症例感受性です。 Striposとは異なり、 MB_STRIPOSは、UTF-8、GBKなどのマルチバイト文字セットの処理に適しています。これは、マルチバイトエンコードされた文字列の最適化です。

     $haystack = "こんにちは,世界!";
    $needle = "世界";
    $pos = mb_stripos($haystack, $needle);  // 消す 3
    

2。主な違い

コーディングサポート:

  • Striposは、シングルバイトエンコードされた文字列(ASCIIなど)でのみ動作します。つまり、UTF-8または他のマルチバイト文字セットを処理する文字列では機能しません。

  • MB_STRIPOSは、マルチバイトエンコーディング(UTF-8、GBKなど)専用に設計されているため、マルチバイト文字を含む文字列を正しく処理できます。

パフォーマンスの違い:

  • MB_STRIPOSにはマルチバイト文字セットを処理するために追加のオーバーヘッドが必要なため、通常のASCII文字列の場合、 StriposはMB_STRIPOSよりも優れています。

  • 処理された文字列がUTF-8または他のマルチバイト文字セットの場合、 MB_STRIPOSはこれらの文字セットを正しく処理できないため、 MB_STRIPOSが不可欠です。

3.シナリオを使用します

  • Striposを使用したシナリオ:

    • 文字列エンコーディングは単一バイト(ASCIIエンコードなど)であり、 StripOSを使用してサブストリングを効率的に見つけることができます。

    • Striposは、英語のキャラクターやシンプルなASCII文字列を扱うときに適した選択です。

  • MB_STRIPOSを使用したシナリオ:

    • 文字列エンコーディングは、UTF-8、GBK、BIG5などのマルチバイトです。MB_STRIPOS使用してサブストリングを正しく見つける必要があります。

    • 中国語、日本、韓国語などのマルチバイト文字を含む文字列を処理する場合、 MB_STRIPOSを使用する必要があります。

4。パフォーマンスの比較

Striposは、特に文字列がASCIIエンコードされている場合、パフォーマンスの点でより軽い機能です。文字のバイト長を考慮する必要がないため、より速くなります。ただし、マルチバイト文字(UTF-8エンコード中国の弦など)を扱う場合、 MB_STRIPOSが必要です。これは、マルチバイト文字の複雑さのためにわずかに遅くなります。

サンプルコード:

Striposを使用して、ASCII文字列でサブストリングを見つけます。

 <?php
$haystack = "This is a test string.";
$needle = "test";
$position = stripos($haystack, $needle);

if ($position !== false) {
    echo "Found '$needle' at position $position";
} else {
    echo "Not found";
}
?>

MB_STRIPOSを使用して、UTF-8文字列のサブストリングを見つけます。

 <?php
$haystack = "こんにちは,世界!";
$needle = "世界";
$position = mb_stripos($haystack, $needle);

if ($position !== false) {
    echo "Found '$needle' at position $position";
} else {
    echo "Not found";
}
?>

5。概要

  • Striposは、シングルバイトの文字セット(ASCIIなど)に適しており、パフォーマンスが優れています。

  • MB_STRIPOSは、これらの文字を正しく処理するマルチバイト文字セット(UTF-8、GBKなど)に適しています。

  • Striposは、英語やASCIIのキャラクターを扱う場合、より効率的です。 MB_STRIPOSは、中国語またはその他のマルチバイト文字を扱うときに使用されます。