Aktueller Standort: Startseite> Neueste Artikel> Was ist der Unterschied zwischen Stripos und Mb_stripos?

Was ist der Unterschied zwischen Stripos und Mb_stripos?

M66 2025-05-31

In PHP sind Stripos und MB_stripos beide Funktionen, mit denen die Position der Unterstrings ermittelt wird, aber sie haben einige signifikante Unterschiede. In diesem Artikel werden ihre Unterschiede, anwendbaren Szenarien und Leistungsunterschiede im Detail erörtert.

1. Definition von Stripos und Mb_stripos

  • Stripos : Dies ist eine integrierte Funktion in PHP, um herauszufinden, wo eine Zeichenfolge zuerst in einer anderen Zeichenfolge erscheint. Es ist unempfindlich und basiert auf einer Einzelbyte-Codierung, die für gewöhnliche ASCII-Zeichenfolgen geeignet ist.

     $haystack = "Hello world!";
    $needle = "world";
    $pos = stripos($haystack, $needle);  // sich herausstellen 6
    
  • mb_stripos : Diese Funktion stammt aus der Multi-Byte-String-Erweiterung (Mbstring). Seine Funktion ähnelt Stripos . Es wird auch verwendet, um den Ort eines Substrings zu ermitteln, und ist unempfindlich. Im Gegensatz zu Stripos eignet sich MB_stripos für die Behandlung von Multibyte-Zeichensätzen wie UTF-8, GBK usw. Es ist für Multibyte-codierte Zeichenfolgen optimiert.

     $haystack = "Hallo,Welt!";
    $needle = "Welt";
    $pos = mb_stripos($haystack, $needle);  // sich herausstellen 3
    

2. Hauptunterschiede

Codierungsunterstützung:

  • Stripos arbeitet nur mit einzelbyte codierten Zeichenfolgen (wie ASCII), was bedeutet, dass es nicht mit Saiten funktioniert, die UTF-8 oder andere Multibyte-Zeichensets verarbeiten.

  • MB_stripos wurde speziell für Multibyte-Codierung (wie UTF-8, GBK usw.) entwickelt, sodass Strings, die Multibyte-Zeichen enthalten, korrekt verarbeitet werden können.

Leistungsunterschiede:

  • Für gewöhnliche ASCII -Saiten erzielt Stripos besser als Mb_stripos , da Mb_stripos zusätzlichen Overhead benötigt, um Multibyte -Zeichensätze zu verarbeiten.

  • Wenn die verarbeitete Zeichenfolge UTF-8 oder andere Multibyte-Zeichensätze sind, ist MB_Stripos essentiell, da Stripos diese Zeichensätze nicht korrekt verarbeiten können.

3. Verwenden Sie Szenarien

  • Szenarien mit Stripos :

    • Die String -Codierung ist ein einzelnes Byte (z. B. ASCII -Codierung), und Sie können Stripos verwenden, um Substrings effizient zu finden.

    • Stripos ist eine geeignete Wahl beim Umgang mit englischen Charakteren oder einfachen ASCII -Zeichenfolgen.

  • Szenarien mit mb_stripos :

    • String-Codierung ist Multi-Byte, wie UTF-8, GBK, Big5 usw. Sie müssen MB_Stripos verwenden, um Substrings korrekt zu finden.

    • Bei der Verarbeitung von Zeichenfolgen, die Multi-Byte-Zeichen wie Chinesen, Japanisch und Koreanisch enthalten, müssen Sie MB_Stripos verwenden.

4. Leistungsvergleich

Stripos ist eine leichtere Funktion in Bezug auf die Leistung, insbesondere wenn die Zeichenfolge ASCII codiert ist, wird sie schneller, da sie die Byte -Länge des Zeichens nicht berücksichtigen muss. Im Umgang mit Multibyte-Zeichen (z. B. von UTF-8-kodierter chinesischer Zeichenfolgen) ist jedoch MB_stripos erforderlich, was aufgrund der Komplexität von Multibyte-Zeichen etwas langsamer ist.

Beispielcode:

Verwenden Sie Stripos , um Substrings in einer ASCII -Zeichenfolge zu finden:

 <?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";
}
?>

Verwenden Sie MB_stripos , um Substrings in UTF-8-Zeichenfolgen zu finden:

 <?php
$haystack = "Hallo,Welt!";
$needle = "Welt";
$position = mb_stripos($haystack, $needle);

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

5. Zusammenfassung

  • Stripos eignet sich für Single-Byte-Zeichensets (wie ASCII) und hat eine gute Leistung.

  • mb_stripos ist für Multibyte-Zeichensätze (z. B. UTF-8, GBK usw.) geeignet, die diese Zeichen richtig behandelt.

  • Stripos ist im Umgang mit englischen oder ASCII -Zeichen effizienter; Mb_stripos wird beim Umgang mit chinesischen oder anderen Multibyte -Zeichen verwendet.