Beim Umgang mit Multibyte -Zeichen -Codierung bietet PHP die Funktion iconv_strrpos , um das letzte Auftreten eines Substrings in einer Zeichenfolge zu ermitteln. Diese Funktion ist besonders wichtig für die Behandlung von Multi-Byte-Codierung wie UTF-8, da herkömmliche STRRPOs aufgrund von Byte-Segmentierungsfehlern zu einer Fehlausrichtung von Positionsberechnungen führen können. Mit dem Upgrade von PHP -Versionen ändert sich jedoch auch das Verhalten von ICONV_STRRPOS in Details, und das Verständnis dieser Unterschiede ist für Entwickler von entscheidender Bedeutung, um potenzielle Kompatibilitätsprobleme zu vermeiden.
Die Verwendung von Iconv_Strrpos ähnelt Strrpos , und seine Funktionsdefinition lautet wie folgt:
int iconv_strrpos ( string $haystack , string $needle [, int $offset = 0 [, string $encoding = ini_get("iconv.internal_encoding") ]] )
$ haystack : Die String, nach der man suchen muss.
$ nadel : Das zu findene Substring.
$ offset : Suche nach der Startposition (Standard ist 0, negative Zahlen werden unterstützt).
$ codierung : String -Codierung, Standard wird von iconv.internal_encoding entnommen.
Der Rückgabewert ist die letzte Zeichenposition (basierend auf Zeichen, nicht Bytes), wenn $ nadel erscheint, und gibt false zurück, wenn er nicht gefunden werden kann.
iconv_strrpos verhält sich bei der Verarbeitung von $ offset -Parametern instabil. Negative Offsets funktionieren manchmal nicht und können sogar zu Fehlern führen.
Die Standardcodierung hängt von iConv.internal_encoding ab. Wenn es nicht explizit festgelegt ist, kann es dazu führen, dass eine Multibyte -Codierungserkennung fehlschlägt.
Einige Fehler veranlassen die Funktion, eine Ausnahme zurückzugeben, wenn die $ -Nadellänge größer als 1 ist.
Der Umgang mit $ offset ist genauer, negative Unterstützung ist perfekt und stimmt mit der Beschreibung der Dokumente überein.
Die Standardcodierungsparameter werden empfohlen, um explizit zu bestehen, die Konfigurationsabhängigkeit zu verringern und Unterschiede aufgrund unterschiedlicher Umgebungen zu vermeiden.
Löste die Rückgaberegelung, Leistung und Stabilitätsverbesserungen, wenn $ multibyte String -Matching $.
Vor einigen PHP 7.2 -Versionen gab es bestimmte Kantenfehler, und es wird empfohlen, auf PHP 7.3+ zu aktualisieren, um eine zuverlässigere Leistung zu erzielen.
iconv_strrpos hängt von den richtigen codierungsparametern ab Stellen Sie sicher, dass Sie $ Coding explizit bestanden haben. Es wird empfohlen, explizit zu schreiben, wie:
$pos = iconv_strrpos($str, $needle, 0, 'UTF-8');
$ offset ist ein charakterbasierter Index, nicht Bytes.
Der negative Offset gibt den Ausgangspunkt an, der aus dem gegenseitigen Ende der Zeichenfolge berechnet wird.
Frühe PHP -Versionen hatten eine schlechte Unterstützung für negative Offsets, daher sollten Sie bei der Verwendung der Versionskompatibilität achten.
Gibt die Charakterposition (ab 0), Nicht-Byte-Position zurück.
Wenn Falsch nicht gefunden wird und falsch und ganzzahlige 0 bei der Beurteilung leicht verwechselt werden, wird empfohlen, kongruentes Urteil zu verwenden:
if ($pos === false) {
echo "Kein Substring gefunden";
} else {
echo "Der Ort ist: $pos";
}
Wenn $ nadel Multibyte -Zeichen enthält, ist Php 7+ in der Verarbeitung genauer. Vermeiden Sie die Verwendung von Single-Byte-String-Funktionen anstelle von iconv_strrpos , um verstümmelte oder offset-Fehler zu vermeiden.
<?php
// Annahmen $str In Chinesisch enthalten
$str = "Dies ist ein Test String -Test";
// PHP 7+ Empfohlenes Schreiben,Eindeutig codiert
$needle = "prüfen";
$pos = iconv_strrpos($str, $needle, 0, 'UTF-8');
if ($pos !== false) {
echo "Das letzte Mal, dass es erscheint, ist: $pos\n";
} else {
echo "Kein Substring gefunden\n";
}
Ausgabe:
Das letzte Mal, dass es erscheint, ist: 8
In älteren Versionen kann ein Fehler oder Falsch ausgegeben werden, wenn keine Codierung angegeben ist.
ICONV_STRRPOS ist eine unverzichtbare Funktion in der Multibyte -String -Verarbeitung, aber ihr Verhalten hängt von der PHP -Version und den Codierungseinstellungen ab.
Die Einführungscodierungen sollten während der Entwicklung explizit übergeben werden, um nicht auf Standardkonfigurationen zu stützen.
Verwenden Sie für negative Unterstützung für den $ -Spreiswert -Wert auf Php 7 oder höher.
Achten Sie auf das Typ -Urteil, wenn Sie den Rückgabewert verwenden, um Verwirrung zwischen 0 und Falsch zu verhindern.
Es wird empfohlen, Kompatibilitätstests für verwandte Funktionen durchzuführen, wenn die PHP -Version aktualisiert wird, um sicherzustellen, dass das Programm korrekt ausgeführt wird.