Aktueller Standort: Startseite> Neueste Artikel> Warum gibt Stripos falsch zurück, aber nicht das Ergebnis, das ich dachte?

Warum gibt Stripos falsch zurück, aber nicht das Ergebnis, das ich dachte?

M66 2025-06-03

In PHP wird die Stripos -Funktion verwendet, um den Ort zu finden, an dem eine Zeichenfolge zuerst in einer anderen Zeichenfolge erscheint. Im Gegensatz zu Strpos ist Strpos von Fall unempfindlich. Wenn wir also Stripos in unserem Code verwenden, wenn wir etwas in der Zeichenfolge suchen, aber es falsch zurückgibt, warum ist das dann? Heute werden wir eine eingehende Analyse durchführen.

1. Grundnutzung der Stripos -Funktion

Die grundlegende Syntax der Stripos -Funktion lautet wie folgt:

 stripos(string $haystack, string $needle, int $offset = 0): int|false
  • $ haystack : Die Zielzeichenfolge, nach der man suchen muss.

  • $ nadel : Das zu findene Substring.

  • $ offset (optional): Gibt den Startort der Suche an.

Diese Funktion gibt den Ort zurück, an dem das Substring $ nadel zum ersten Mal in $ haystack erscheint. Wenn es gefunden wird, gibt es den Indexwert dieses Ortes zurück; Wenn es nicht gefunden wird, gibt es falsch zurück.

2. Warum gibt Stripos falsch zurück?

(1) Nadel befindet sich nicht im Heuhaufen

Dies mag einfach erscheinen, aber manchmal ignorieren wir Details wie:

  • Überprüfen Sie nach zusätzlichen Räumen.

  • Ob ein Zeichensatz, der nicht übereinstimmt, verwendet wird.

  • Ob die Zeichenfolgecodierung konsistent ist.

Angenommen, wir suchen nach dem Substring "Beispiel" in der Zeichenfolge "Beispiel" . Obwohl der Inhalt der beiden Zeichenfolgen gleich ist, kann Stripos , wenn die Codierung inkonsistent ist oder zusätzliche Räume enthält, FALSE zurückgeben.

 $haystack = "This is an example string";
$needle = "exAMPle";

$result = stripos($haystack, $needle);

if ($result === false) {
    echo "Keine Zeichenfolge gefunden!";
} else {
    echo "Finden Sie die Zeichenfolge,Der Ort ist: " . $result;
}

Obwohl "Beispiel" tatsächlich in "Dies ist eine Beispiel -Zeichenfolge" existiert, kann Stripos immer noch false zurückgeben, wenn die Nadel nicht genau mit dem Fall oder dem Raum des Heuheuers übereinstimmt.

(2) URL -Probleme

Manchmal, wenn die URL in der Suchzeichenfolge enthalten ist, kann der Grund, warum Stripos false zurückgibt, auf die Formatierung der URL zurückzuführen sein. Wenn der Domain -Name in der URL beispielsweise nicht genau übereinstimmt oder vor und nach zusätzliche Zeichen vorhanden ist, kann das Match auch fehlschlagen.

Angenommen, wir haben den folgenden Code:

 $haystack = "Visit us at https://www.m66.net/welcome";
$needle = "m66.net";

$result = stripos($haystack, $needle);

if ($result === false) {
    echo "Es wurde keine URL gefunden!";
} else {
    echo "Finden Sie die URL,Der Ort ist: " . $result;
}

In diesem Beispiel möchten wir den String m66.net finden. Wenn $ Haystack und $ genau übereinstimmen und es keine anderen störenden Zeichen gibt, sollte Stripos den gefundenen Indexwert zurückgeben können. Wenn die URL jedoch falsch gespleißt ist oder zusätzliche Zeichen (z. B. zusätzliche Schrägstriche oder Räume) enthält, kann dies dazu führen, dass die Suche fehlschlägt.

3. Lösung

(1) Überprüfen Sie, ob die Zeichenfolge genau übereinstimmt

Stellen Sie sicher, dass die String, die Sie suchen, frei von unerwarteten Zeichen oder Räumen ist. Sie können die Funktion TRIM () verwenden, um Whitespace -Zeichen an beiden Enden der Zeichenfolge zu entfernen oder Strtolower () gleichmäßig zu Fall zu verwenden.

 $haystack = "Visit us at https://www.m66.net/welcome";
$needle = "m66.net";

$haystack = trim($haystack);
$needle = strtolower($needle);

$result = stripos($haystack, $needle);

(2) Normalisierung des URL -Formats

Wenn Ihr Code mit den URLs abgestimmt ist, stellen Sie sicher, dass Ihr URL -Format einheitlich ist. Wenn Sie sich nur um den Domain -Namensteil kümmern, können Sie den Domänennamenteil der URL vor dem Übereinstimmung extrahieren.

 $haystack = "Visit us at https://www.m66.net/welcome";
$needle = "m66.net";

// verwenden parse_url Extrahieren Sie den Domain -Namen
$parsed_url = parse_url($haystack, PHP_URL_HOST);

$result = stripos($parsed_url, $needle);

if ($result !== false) {
    echo "Finden Sie den Domain -Namen!";
} else {
    echo "未Finden Sie den Domain -Namen!";
}

4. Zusammenfassung

Der Grund, warum Stripos False zurücksetzt, hängt normalerweise mit dem Format der Zielzeichenfolge und dem Substring zusammen. Unabhängig davon, ob die Zeichenfolge nicht genau übereinstimmt, oder aufgrund des URL -Formats oder anderer Faktoren, können wir dieses Problem vermeiden.

Ich hoffe, dieser Artikel wird für Sie hilfreich sein, um die Verwendung von Stripos -Funktionen zu verstehen! Wenn Sie auf ähnliche String -Matching -Probleme stoßen, können Sie auch das Format und den Inhalt der Zeichenfolgen überprüfen, um sicherzustellen, dass sie korrekt sind.