Position actuelle: Accueil> Derniers articles> Comment éviter que les tableaux soient hors limites en raison de l'utilisation abusive de la fonction d'exploitation? Solutions pratiques et techniques de prévention

Comment éviter que les tableaux soient hors limites en raison de l'utilisation abusive de la fonction d'exploitation? Solutions pratiques et techniques de prévention

gitbox 2025-07-12

1. Utilisation de base de la fonction exploit ()

Tout d'abord, passons en revue l'utilisation de base de la fonction exploit () :

 <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>
  • $ Delimiter : chaîne utilisée comme délimiteur

  • $ String : la chaîne cible à diviser

  • $ limite : paramètre facultatif, limite le nombre d'éléments de tableau retournés. La valeur par défaut est PHP_INT_MAX, c'est-à-dire, renvoie tous les éléments divisés.

Par exemple:

 <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>

Le résultat de la sortie est:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">0</span></span><span>] =&gt; apple
    [</span><span><span class="hljs-number">1</span></span><span>] =&gt; banana
    [</span><span><span class="hljs-number">2</span></span><span>] =&gt; orange
)
</span></span>

Cela semble très simple, mais si les paramètres passés dans Expoit () sont inappropriés, ou si le tableau renvoyé n'est pas traité correctement, cela peut entraîner des erreurs difficiles à savoir, en particulier le problème du tableau hors limites.


2. Risque potentiel de frontières de passage à tableau

Lorsque vous utilisez la fonction Exploit () , le problème de la baisse du tableau se reflète généralement dans les situations suivantes:

  1. La chaîne d'entrée est vide ou il n'y a pas de séparateur <br> Si $ string est une chaîne vide ou que le délimiteur n'existe pas dans la chaîne, exploit () renvoie un tableau contenant la chaîne d'origine. À l'heure actuelle, si le programme essaie d'accéder à des éléments de tableau inexistants, une erreur hors limites du tableau se produira.

    Par exemple:

     <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">// Sortir:Array([0] =&gt; '')</span></span><span>
    </span></span>

    Si vous essayez d'accéder à $ array [1] , vous rencontrerez une erreur.

  2. Utilisez le paramètre $ limite inapproprié
    Exploit () permet également de spécifier le nombre d'éléments de tableau divisés, qui est contrôlé par le paramètre $ limite . Si la valeur limite de $ spécifiée est inappropriée, elle peut rendre la durée du tableau renvoyée incompatible avec les attentes, entraînant le problème du tableau hors limites.


3. Conseils courants pour éviter les réseaux de franchissement des limites

Afin d'éviter que le tableau soit traversé par l'utilisation abusive de la fonction d'exploit () , les mesures préventives efficaces suivantes peuvent être prises:

3.1. Vérifiez si le délimiteur existe

Avant d'appeler la fonction exploit () , vérifiez si la chaîne cible contient le délimiteur spécifié. S'il n'y a pas de séparateur dans la chaîne, renvoyez simplement le tableau de la chaîne d'origine. Cela peut éviter efficacement le problème des limites de traversée du tableau.

 <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">// Quand il n&#39;y a pas de séparateur,Renvoie un tableau contenant la chaîne d&#39;origine</span></span><span>
}
</span></span>

3.2. Définir les paramètres de limite $ raisonnable

Si vous souhaitez limiter le tableau divisé à une certaine longueur, vous pouvez raisonnablement définir le paramètre $ limite en fonction des besoins spécifiques. Si vous n'avez pas besoin de limiter la longueur du tableau, il est préférable de définir $ limite à la par défaut PHP_INT_MAX .

 <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">// Définissez le nombre maximum d&#39;éléments après la division</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>

3.3. Utiliser la fonction Count () pour vérifier la longueur du tableau

Lorsque vous accédez à des éléments de tableau fendu, utilisez d'abord la fonction Count () pour vérifier la longueur réelle du tableau pour éviter d'accès aux éléments hors de portée.

 <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>) &gt; </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">// Accès sécurisé aux éléments de tableau</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">"Éléments de tableau insuffisants"</span></span><span>;
}
</span></span>

3.4. Utilisez la fonction vide () pour vérifier si le tableau est vide

Pour éviter les erreurs car le tableau est vide, vous pouvez utiliser la fonction vide () pour vérifier si le tableau a une valeur.

 <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">// Traitement des tableaux</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">"Le tableau est vide"</span></span><span>;
}
</span></span>

4. Autres compétences de prévention avancée

En plus des techniques de prévention régulières, vous pouvez également utiliser des méthodes avancées pour améliorer la robustesse de votre code:

4.1. ENCAPSOLATION FONCTIONNELLE EXPLOIT ()

Pour éviter le risque potentiel de vérification répétée de l'exploit () , il peut être encapsulé dans une fonction personnalisée et l'inspection et le traitement nécessaires sont effectués dans la fonction.

 <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">// Utiliser la coutume safe_explode fonction</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>

4.2. En utilisant des expressions régulières

Pour certaines exigences complexes de segmentation des chaînes, les expressions régulières fournissent une solution plus flexible. La fonction preg_split () peut être utilisée à la place d' exploit () , prenant en charge plus de règles et d'options de correspondance lors du fractionnement, évitant ainsi les erreurs potentielles.

 <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>