Position actuelle: Accueil> Derniers articles> iconv_substr Comment empêcher les erreurs de "troncature" de caractère "lors de l'interception d'une chaîne?

iconv_substr Comment empêcher les erreurs de "troncature" de caractère "lors de l'interception d'une chaîne?

M66 2025-07-25

3. Causes d'erreur de "troncature des caractères"

  • : 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 .


4. Comment empêcher les erreurs de «troncature du caractère»?

  1. 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>
  1. 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é.

  1. 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> &gt; </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>
  1. 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&#39;interception a échoué,Évitez les exceptions du programme</span></span><span>
}
</span></span>
  1. 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>

V. Exemple de code

 <span><span><span class="hljs-meta">&lt;?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> &gt; </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&#39;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&#39;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">?&gt;</span></span><span>
</span></span>