strlen PHP: À quoi sert la fonction strlen() en PHP ?

La fonction strlen() mesure la longueur d’une chaîne de caractères en retournant le nombre d’octets qui la composent. Elle intervient dans tous les contextes où la taille d’une donnée textuelle conditionne un traitement : validation de formulaire, contrôle de saisie, découpage de contenu ou vérification de contraintes métier. Intégrée nativement depuis PHP 4, elle ne nécessite aucune extension et reste entièrement fonctionnelle sous PHP 8+.

Syntaxe générique de strlen en PHP

Cette fonction repose sur un unique paramètre obligatoire et produit systématiquement une valeur entière en sortie. Sa déclaration est l’une des plus concises du langage : aucune option, aucun drapeau, aucune configuration d’encodage à préciser. Comprendre ses types d’entrée et de sortie suffit pour l’exploiter correctement dans un projet réel.

strlen(string $string): int
ParamètreTypeObligatoireDescription
$stringstring✅ OuiLa chaîne dont on souhaite mesurer la longueur en octets
RetourintLe nombre d’octets que contient la chaîne analysée

Depuis PHP 8.0, transmettre null comme argument produit une valeur de retour 0 accompagnée d’une notice de dépréciation Deprecated. Dans les versions antérieures, cette valeur était convertie silencieusement en chaîne vide sans avertissement. Passer un tableau à la fonction génère un TypeError depuis PHP 8.0 ; ce comportement était auparavant signalé par un simple E_WARNING sous PHP 7.x.

Comment fonctionne strlen ?

Concrètement, strlen() traverse la séquence d’octets constituant la chaîne reçue et retourne leur dénombrement sous forme d’entier. Cette opération est non destructive : la variable source conserve son contenu intact après l’exécution. La valeur produite peut immédiatement alimenter une condition, une comparaison arithmétique, une boucle ou une opération de découpage. Le résultat est toujours positif ou nul : une chaîne vide retourne 0, jamais une valeur négative.

<?php
$texte = "Bonjour";
$longueur = strlen($texte);
echo $longueur;
// Affiche : 7
?>

Les sept octets retournés correspondent aux sept caractères ASCII du mot "Bonjour", chacun occupant exactement un octet en encodage standard. La variable $texte reste inchangée après l’appel ; seule la valeur de retour est exploitable pour la suite du traitement. Ce mécanisme s’applique à toute séquence de caractères ASCII, qu’il s’agisse d’un identifiant technique, d’un code postal ou d’un nom de fichier.

Pour conditionner un traitement à la taille d’une saisie utilisateur, la fonction s’intègre directement dans une structure de contrôle :

<?php
$motDePasse = "abc";
if (strlen($motDePasse) < 8) {
    echo "Le mot de passe doit contenir au moins 8 caractères.";
}
// Affiche : Le mot de passe doit contenir au moins 8 caractères.
?>

La chaîne "abc" ne comptabilise que trois octets, ce qui déclenche bien l’affichage du message d’alerte. Ce contrôle constitue une première barrière de validation avant tout hachage ou stockage sécurisé d’un mot de passe. Il peut être complété par une vérification de longueur maximale pour encadrer précisément les contraintes d’un champ de saisie.

Est-ce que strlen compte les espaces ?

strlen() traite les espaces comme des octets à part entière, au même titre que les lettres, les chiffres ou tout autre caractère imprimable. Un espace simple représente un octet dans la table ASCII, et la fonction n’opère aucune distinction entre caractères visibles et caractères d’espacement. Ce comportement devient un point d’attention lors du comptage de saisies utilisateur pouvant contenir des espaces parasites en début ou en fin de valeur.

<?php
$texte1 = "PHP";      // 3 caractères, aucun espace
$texte2 = "P H P";   // 5 caractères, 2 espaces intercalés
$texte3 = " PHP ";   // 5 caractères, 2 espaces périphériques

echo strlen($texte1); // Affiche : 3
echo strlen($texte2); // Affiche : 5
echo strlen($texte3); // Affiche : 5
?>

$texte2 et $texte3 produisent tous deux 5, bien que leurs espaces soient positionnés différemment dans la chaîne. Pour neutraliser les espaces périphériques avant la mesure, trim() doit être appliqué en amont de strlen(). La combinaison strlen(trim($saisie)) est un pattern défensif courant pour évaluer la longueur réelle d’une entrée formulaire, indépendamment des espaces superflus saisis involontairement.

Que se passe-t-il si on passe un tableau à strlen ?

Passer un tableau à strlen() est une erreur de type fréquente chez les développeurs qui manipulent des structures de données mixtes. Sous PHP 7.x, ce cas produisait un avertissement E_WARNING et retournait null, sans interrompre l’exécution du script. Depuis PHP 8.0, ce comportement tolérant a été supprimé : la fonction lève désormais un TypeError qui stoppe immédiatement l’exécution si l’erreur n’est pas interceptée. Cette évolution renforce la rigueur du typage et incite à valider le type de la variable en amont de tout appel.

<?php
$tableau = ["PHP", "strlen", "tableau"];

// PHP 8.0+ : lève un TypeError
// PHP 7.x : retourne null avec E_WARNING

// Approche correcte : vérifier le type avant l'appel
if (is_string($tableau)) {
    echo strlen($tableau);
} else {
    echo "La variable n'est pas une chaîne de caractères.";
}
// Affiche : La variable n'est pas une chaîne de caractères.
?>

Le contrôle is_string() en amont de l’appel empêche toute levée d’exception en PHP 8.x et tout retour silencieux de null en PHP 7.x. Dans un contexte où la variable peut recevoir différents types selon le flux d’exécution, cette précaution est indispensable. Pour mesurer la taille d’un tableau, count() est la fonction dédiée : strlen() ne doit jamais être utilisée à cette fin.

Comment utiliser strlen dans une boucle ?

Le traitement d’une collection de chaînes est un cas d’usage régulier en manipulation de données textuelles : filtrage de champs, nettoyage de valeurs importées, validation de listes de saisies. Itérer sur un tableau avec strlen() permet d’appliquer une mesure individuelle à chaque élément de la collection. Une erreur classique consiste à appeler strlen() directement dans la condition de la boucle for sur une chaîne unique, ce qui recalcule inutilement la longueur à chaque itération.

<?php
$saisies = ["PHP", "JavaScript", "Go", "Rust", "TypeScript"];

foreach ($saisies as $valeur) {
    $longueur = strlen($valeur);
    if ($longueur > 4) {
        echo $valeur . " : " . $longueur . " caractères\n";
    }
}
// Affiche :
// JavaScript : 10 caractères
// TypeScript : 10 caractères
?>

La longueur de chaque élément est calculée individuellement et stockée dans $longueur avant d’entrer dans la condition de filtrage. Les chaînes de quatre caractères ou moins sont ignorées ; seules celles dépassant ce seuil sont affichées avec leur taille. Ce pattern est directement transposable à la validation d’un ensemble de champs soumis via un formulaire ou importés depuis un fichier CSV.

Pour éviter de recalculer la longueur d’une même chaîne à chaque tour dans une boucle for, la valeur doit être mise en cache avant la déclaration de la boucle :

<?php
$texte = "Traitement octet par octet";
$longueur = strlen($texte); // Calculé une seule fois

for ($i = 0; $i < $longueur; $i++) {
    echo $texte[$i];
}
// Affiche : Traitement octet par octet
?>

Stocker la longueur dans une variable avant la boucle évite un recalcule de la mesure à chaque itération, ce qui améliore les performances sur les chaînes volumineuses. Chaque caractère est ici accessible via son index numérique, comme dans un tableau d’octets. Ce mode d’accès positionnel est utile pour des opérations de parsing ou de transformation caractère par caractère.

Quelle est la différence entre strlen et mb_strlen en PHP ?

strlen() dénombre des octets, tandis que mb_strlen() dénombre des caractères selon un encodage Unicode explicitement défini. Sur une chaîne exclusivement composée de caractères ASCII, les deux fonctions produisent le même entier. La divergence apparaît dès qu’une chaîne contient des caractères multibyte : en UTF-8, un caractère accentué comme "é" occupe deux octets, un idéogramme CJK peut en occuper trois. strlen() retourne alors une taille supérieure au nombre de caractères perceptibles, ce qui fausse toute logique de validation ou de découpage basée sur ce résultat.

<?php
$texte = "éléphant"; // 8 caractères visibles, 10 octets en UTF-8

echo strlen($texte);             // Affiche : 10
echo mb_strlen($texte, "UTF-8"); // Affiche : 8
?>

L’écart de deux unités s’explique par les deux caractères "é" encodés chacun sur deux octets en UTF-8. mb_strlen() avec l’argument "UTF-8" retourne la valeur sémantiquement attendue : huit caractères lisibles. Pour tout projet manipulant du contenu francophone, multilingue ou intégrant des symboles Unicode spéciaux, mb_strlen() est systématiquement préférable à strlen().

Critèrestrlen()mb_strlen()
Unité de mesureOctetsCaractères
Texte ASCII pur✅ Résultat exact✅ Résultat exact
Texte UTF-8 accentué❌ Résultat surestimé✅ Résultat exact
Caractères Unicode multibyte❌ Résultat erroné✅ Résultat exact
Extension nécessaireAucunembstring
Encodage configurable❌ Non✅ Oui
DisponibilitéPHP 4+PHP 4.0.6+

La fonction strlen est-elle obsolète ?

Non, strlen() ne figure dans aucune liste de fonctions dépréciées ou candidates au retrait dans la documentation officielle PHP. Sa signature n’a pas été modifiée depuis son introduction, ce qui garantit une compatibilité ascendante totale avec les bases de code existantes. L’unique évolution notable est celle de PHP 8.0, qui a renforcé la rigueur du typage en transformant les comportements silencieux sur null et les tableaux en erreurs explicites. Cette fonction continuera d’être supportée dans les versions futures sans restriction d’usage.

Sources: PHPnet

Cours

Variables et types

Manipulation de chaînes

Tableaux

Fichiers et système

Sécurité, session et cookie