: Le codage par défaut peut ne pas être le codage réel de votre chaîne, ce qui entraîne une erreur d'interception du nombre d'octets.
La longueur d'interception dépasse le nombre réel de caractères : une erreur peut être signalée lorsque la position d'interception dépasse la longueur de la chaîne.
La chaîne elle-même est incohérente ou corrompue .
Identifier le codage
<span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-string">'UTF-8'</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">iconv_substr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$offset</span></span><span>, </span><span><span class="hljs-variable">$length</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span></span>
Assurez-vous que la longueur et le décalage interceptés sont basés sur des caractères, pas des octets
Le décalage de $ ICONV_SUBSTR et la longueur $ sont des comptes de caractères, pas des octets, mais la chaîne doit être le codage spécifié.
Détecter la longueur de la chaîne à l'avance
Utilisez iconv_strlen pour déterminer la longueur de la chaîne pour éviter les transfrontalières:
<span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-title function_ invoke__">iconv_strlen</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$offset</span></span><span> > </span><span><span class="hljs-variable">$length</span></span><span>) {
</span><span><span class="hljs-comment">// Gérer les décalages et les limites croisées</span></span><span>
}
</span></span>
Gestion des erreurs
Si une erreur se produit dans iconv_substr , elle peut retourner false . Faites un bon jugement:
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">iconv_substr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$offset</span></span><span>, </span><span><span class="hljs-variable">$length</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-comment">// Le traitement de l'interception a échoué,Évitez les exceptions du programme</span></span><span>
}
</span></span>
Utilisez la fonction MBSTring comme une alternative
MB_SUBSTR est également une fonction d'interception de chaîne multi-octets, souvent utilisée pour remplacer iconv_substr :
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_substr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$offset</span></span><span>, </span><span><span class="hljs-variable">$length</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span></span>
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"Ceci est une chaîne de test,Pour démonstration iconv_substr Usage。"</span></span><span>;
</span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-string">'UTF-8'</span></span><span>;
</span><span><span class="hljs-variable">$offset</span></span><span> = </span><span><span class="hljs-number">3</span></span><span>;
</span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-number">5</span></span><span>;
</span><span><span class="hljs-variable">$totalLength</span></span><span> = </span><span><span class="hljs-title function_ invoke__">iconv_strlen</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$offset</span></span><span> > </span><span><span class="hljs-variable">$totalLength</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"La position de début de l'interception dépasse la longueur de la chaîne。"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-variable">$substr</span></span><span> = </span><span><span class="hljs-title function_ invoke__">iconv_substr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$offset</span></span><span>, </span><span><span class="hljs-variable">$length</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$substr</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"L'interception des cordes a échoué,Il peut y avoir des problèmes de codage。"</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">"Intercepter les résultats:"</span></span><span> . </span><span><span class="hljs-variable">$substr</span></span><span>;
}
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>