Lassen Sie uns zunächst die grundlegende Nutzung der Funktion Exploit () überprüfen:
<span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$delimiter</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$limit</span></span><span> = PHP_INT_MAX)
</span></span>
$ trenner : Zeichenfolge, die als Trennzeichen verwendet wird
$ String : Die Zielzeichenfolge, die aufgeteilt werden soll
$ Limit : Optionaler Parameter, begrenzt die Anzahl der zurückgegebenen Array -Elemente. Die Standardeinstellung ist PHP_INT_MAX, dh alle geteilten Elemente zurück.
Zum Beispiel:
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"apple,banana,orange"</span></span><span>;
</span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-string">","</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span></span>
Das Ausgangsergebnis ist:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[</span><span><span class="hljs-number">0</span></span><span>] => apple
[</span><span><span class="hljs-number">1</span></span><span>] => banana
[</span><span><span class="hljs-number">2</span></span><span>] => orange
)
</span></span>
Es erscheint sehr einfach, aber wenn die in exploit () übergebenen Parameter unangemessen sind oder das zurückgegebene Array nicht ordnungsgemäß verarbeitet wird, kann dies zu schwer zu kennenden Fehlern führen, insbesondere zu dem Problem des Arrays außerhalb der Grenzen.
Bei Verwendung der Funktion exploit () spiegelt sich das Problem von Array außerhalb der Bounds normalerweise in den folgenden Situationen wider:
Die Eingangszeichenfolge ist leer oder es gibt keinen Separator <br> Wenn $ String eine leere Zeichenfolge ist oder der Trennzeichen in der Zeichenfolge nicht vorhanden ist, gibt exploit () ein Array zurück, das die ursprüngliche Zeichenfolge enthält. Wenn das Programm zu diesem Zeitpunkt versucht, auf nicht existierende Array-Elemente zuzugreifen, tritt ein Array-Fehler auf, das außerhalb der Untergrenze auftritt.
Zum Beispiel:
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">""</span></span><span>;
</span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-string">","</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span><span><span class="hljs-comment">// Ausgabe:Array([0] => '')</span></span><span>
</span></span>
Wenn Sie versuchen, auf $ Array [1] zuzugreifen, werden Sie auf einen Fehler stoßen.
Verwenden Sie den unangemessenen Parameter $ limit
Exploit () ermöglicht auch die Anzahl der geteilten Array -Elemente, die durch den Parameter $ Limit gesteuert werden. Wenn der angegebene $ Grenzwert unangemessen ist, kann er dazu führen, dass die zurückgegebene Array -Länge mit dem erwarteten Widerspruch nicht im Widerspruch steht, was zu dem Problem des Arrays aus den Grenzen führt.
Um zu vermeiden, dass das Array durch den Missbrauch der Exploit () -Funktion durchquert wird, können die folgenden wirksamen vorbeugenden Maßnahmen ergriffen werden:
Überprüfen Sie vor dem Aufrufen der Funktion exploit () , ob die Zielzeichenfolge den angegebenen Trennzeichen enthält. Wenn in der Zeichenfolge kein Trennzeichen vorhanden ist, geben Sie einfach das Array der ursprünglichen Zeichenfolge zurück. Dies kann das Problem der Array -Kreuzungsgrenzen effektiv vermeiden.
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$delimiter</span></span><span>) !== </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-variable">$delimiter</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-variable">$str</span></span><span>]; </span><span><span class="hljs-comment">// Wenn es keinen Trennzeichen gibt,Gibt ein Array zurück, das die ursprüngliche Zeichenfolge enthält</span></span><span>
}
</span></span>
Wenn Sie das Split -Array auf eine bestimmte Länge beschränken möchten, können Sie den Parameter $ limit nach bestimmten Anforderungen vernünftigerweise festlegen. Wenn Sie die Array -Länge nicht einschränken müssen, ist es besser, $ Limit auf den Standard -PHP_INT_MAX festzulegen.
<span><span><span class="hljs-variable">$limit</span></span><span> = </span><span><span class="hljs-number">3</span></span><span>; </span><span><span class="hljs-comment">// Stellen Sie die maximale Anzahl von Elementen nach der Teilung fest</span></span><span>
</span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-string">","</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$limit</span></span><span>);
</span></span>
Verwenden Sie beim Zugriff auf Split -Array -Elemente zunächst die Funktion count (), um die tatsächliche Länge des Arrays zu überprüfen, um auf Elemente zuzugreifen, die außerhalb des Bereichs liegen.
<span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-string">","</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">count</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>) > </span><span><span class="hljs-number">2</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$array</span></span><span>[</span><span><span class="hljs-number">2</span></span><span>]; </span><span><span class="hljs-comment">// Sichern Sie den Zugriff auf Array -Elemente</span></span><span>
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Unzureichende Array -Elemente"</span></span><span>;
}
</span></span>
Um Fehler zu vermeiden, da das Array leer ist, können Sie die Funktion leer () verwenden, um zu überprüfen, ob das Array einen Wert hat.
<span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-string">","</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>)) {
</span><span><span class="hljs-comment">// Verarbeitungsarrays</span></span><span>
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Das Array ist leer"</span></span><span>;
}
</span></span>
Zusätzlich zu den regulären Präventionstechniken können Sie auch einige erweiterte Methoden anwenden, um die Robustheit Ihres Codes zu verbessern:
Um das potenzielle Risiko einer wiederholten Überprüfung von Exploit () zu vermeiden, kann es in eine benutzerdefinierte Funktion eingekapselt werden, und die erforderliche Inspektion und Verarbeitung werden innerhalb der Funktion durchgeführt.
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">safe_explode</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$delimiter</span></span></span><span>, </span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-variable">$limit</span></span><span> = PHP_INT_MAX) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>)) {
</span><span><span class="hljs-keyword">return</span></span><span> [];
}
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-variable">$delimiter</span></span><span>) === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> [</span><span><span class="hljs-variable">$string</span></span><span>];
}
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-variable">$delimiter</span></span><span>, </span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-variable">$limit</span></span><span>);
}
</span><span><span class="hljs-comment">// Benutzerdefinierte benutzerdefinierte safe_explode Funktion</span></span><span>
</span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">safe_explode</span></span><span>(</span><span><span class="hljs-string">","</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span></span>
Bei einigen komplexen Anforderungen an die String -Segmentierung bieten regelmäßige Ausdrücke eine flexiblere Lösung. Die Funktion preg_split () kann anstelle von exploit () verwendet werden, wodurch bei der Aufteilung mehr übereinstimmende Regeln und Optionen unterstützt werden, wodurch potenzielle Fehler vermieden werden.
<span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_split</span></span><span>(</span><span><span class="hljs-string">"/,/"</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span></span>
Verwandte Tags:
explode