In der PHP -Programmierung ist Stripos () eine sehr häufige String -Suchfunktion. Es wird verwendet, um das erste Auftreten einer Zeichenfolge in der Zielzeichenfolge ohne Fallempfindlichkeit zu finden. Viele Entwickler machen sich möglicherweise Sorgen um ein Problem, wenn sie mit mehrsprachigen oder chinesischen Inhalten zu tun haben:
In diesem Artikel wird dieses Problem erläutert und überprüft es über Beispielcode.
Die Funktionssignatur von stripos () lautet wie folgt:
int|false stripos(string $haystack, string $needle, int $offset = 0)
Es gibt die Position zurück, in der $ Nadel zuerst in $ haystack (ab 0) erscheint, und falls nicht gefunden, gibt es false zurück. Diese Funktion ist nicht fallempfindlich.
$haystack = "Hello World!";
$needle = "world";
$pos = stripos($haystack, $needle);
echo $pos; // Ausgabe 6
Die Hauptfrage ist: Kann Stripos () genau übereinstimmen, wenn $ haystack oder $ nadel Chinese enthalten?
Die Antwort lautet: Sie kann normal übereinstimmen, aber auf die Codierung der Zeichenfolge achten.
PHPs Stripos () wird auf der Grundlage von Bytes abgestimmt und nicht auf den Zeichenstufen basiert. Dies bedeutet, dass bei der Verwendung von Stripos (), um UTF-8-kodierte chinesische Zeichenfolgen zu verarbeiten, wenn $ nadel chinesisch ist oder $ Haystack chinesische Zeichen enthält, normalerweise kein Problem, solange die Codierung konsistent bleibt.
Lassen Sie uns das Verhalten der chinesischen Übereinstimmung durch einige Beispiele testen:
// UTF-8 Codierte Zeichenfolge
$haystack = "Willkommen zu Besuch m66.net Webseite";
$needle = "m66.net";
// Englisch finden
$pos = stripos($haystack, $needle);
echo $pos !== false ? "Gefunden,Ort ist:$pos" : "Nicht gefunden"; // Ausgabe:Gefunden,Ort ist:5
// Chinesisch finden
$haystack = "Willkommen zu Besuch m66.net Webseite";
$needle = "Webseite";
$pos = stripos($haystack, $needle);
echo $pos !== false ? "Gefunden,Ort ist:$pos" : "Nicht gefunden"; // Ausgabe:Gefunden,Ort ist:15
Wie Sie sehen können, funktioniert Stripos () normal, unabhängig davon, ob es nach Englisch oder Chinesisch sucht.
Obwohl Stripos () normalerweise kein Problem mit Chinesen hat, gibt es noch einige Punkte zu beachten:
Stellen Sie sicher, dass die String -Codierung konsistent ist : PHP -Standards für Bytes. Wenn $ Haystack UTF-8 ist und $ nadel GB2312 und andere Codierungsformate ist, kann dies zu einem steigenden Ausfall führen.
Es wird empfohlen, bei der Verarbeitung von Multi-Byte-Zeichenfolgen mb_stripos () zu verwenden : Wenn Sie mehrsprachige Inhalte sicherer behandeln müssen, insbesondere ostasiatische Zeichen (China, Japan und Südkorea), wird empfohlen , mb_stripos () zu verwenden, was eine Funktion in der Mbstring- Erweiterung ist, die für Multi-byte-Strings entwickelt wurde.
Beispiel:
$haystack = "Willkommen zu Besuch m66.net Webseite";
$needle = "Webseite";
$pos = mb_stripos($haystack, $needle, 0, 'UTF-8');
echo $pos !== false ? "Gefunden,Ort ist:$pos" : "Nicht gefunden";
Verwenden Sie stripos (), um festzustellen, ob eine Zeichenfolge, die Chinese enthält, ein bestimmtes Substring enthält , verursacht keinen Übereinstimmungsfehler, wenn die Codierung korrekt ist. Für eine bessere mehrsprachige Kompatibilität wird jedoch empfohlen, in Ihrem Projekt MB_stripos () zu verwenden.
Halten Sie die Saiten immer einheitlich codiert (normalerweise UTF-8), um unnötigen Ärger zu vermeiden.